怎麼調用存儲過程
一、簡單的儲存過程:
1、創建一個存儲過程
create procere GetUsers()
begin
select * from user;
end;12345
2、調用存儲過程
call GetUsers();12
3、刪除存儲過程
drop procere if exists GetUsers;
二、帶參數的存儲過程
1、MySql 支持 IN (傳遞給存儲過程) , OUT (從存儲過程傳出) 和 INOUT (對存儲過程傳入和傳出) 類型的參數 , 存儲過程的代碼位於 BEGIN 和 END 語句內 , 它們是一系列 SQL 語句 , 用來檢索值 , 然後保存到相應的變數 (通過指定INTO關鍵字) ;
2、下面的存儲過程接受三個參數 , 分別用於獲取用戶表的最小 , 平均 , 最大分數 , 每個參數必須具有指定的類型 , 這里使用十進制值(decimal(8,2)) , 關鍵字 OUT 指出相應的參數用來從存儲過程傳出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、調用此存儲過程 , 必須指定3個變數名(所有 MySql 變數都必須以@開始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、該調用並沒有任何輸出 , 只是把調用的結果賦給了調用時傳入的變數@minScore, @avgScore, @maxScore, 然後即可調用顯示該變數的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 參數 , 輸入一個用戶 id , 返回該用戶的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、調用存儲過程 :
call GetNameByID(1, @userName);
select @userName;123
B. SQL存儲過程如何調用存儲過程
1、首先先創建一個存儲過程,代碼如圖,存儲過程主要的功能是為表JingYan插入新的數據。
C. js怎樣調用存儲過程
JDBC調用存儲過程:CallableStatement 在java裡面調用存儲過程,寫法那是相當的固定: Class.forName(.... Connectionconn=DriverManager.getConnection(.... /** *p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號佔位符代替 *其餘地方寫法固定 */ CallableStatementcstmt=conn.prepareCall("{callp(?,?,?,?)}"); /** *告訴JDBC,這些個參數,哪些是輸出參數,輸出參數的類型用java.sql.Types來指定 *下面的意思是,第3個?和第4個?是輸出參數,類型是INTEGER的 *Types後面具體寫什麼類型,得看你的存儲過程參數怎麼定義的 */ cstmt.registerOutParameter(3,Types.INTEGER); cstmt.registerOutParameter(4,Types.INTEGER); /** *p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號佔位符代替 *其餘地方寫法固定 */ CallableStatementcstmt=conn.prepareCall("{callp(?,?,?,?)}"); /** *在我這里第1個?和第2個?是輸入參數,第3個是輸出參數,第4個既輸入又輸出 *下面是設置他們的值,第一個設為3,第二個設為4,第4個設置為5 *沒設第3個,因為它是輸出參數 */ cstmt.setInt(1,3); cstmt.setInt(2,4); cstmt.setInt(4,5); //執行 cstmt.execute(); //把第3個參數的值當成int類型拿出來 intthree=cstmt.getInt(3); System.out.println(three); //把第4個參數的值當成int類型拿出來 intfour=cstmt.getInt(4); System.out.println(four); //用完別忘給人家關了,後開的先關 cstmt.close(); conn.close(); JDBC調用存儲過程,掌握這一個程序足夠了. 以下是上面程序使用的存儲過程的代碼,我用的是Oracle資料庫,不過不論是什麼資料庫,對於你的程序,JDBC這一端寫法都是一樣的. createorreplaceprocerep (v_ainnumber,v_bnumber,v_retoutnumber,v_tempinoutnumber) is begin if(v_a>v_b)then v_ret:=v_a; else v_ret:=v_b; endif; v_temp:=v_temp 1; end;
D. oracle 怎麼調用存儲過程
ORACLE存儲過程 以oracle自帶例子資料庫的表舉例
1、
create or replace procere p
is
cursor c is
select * from emp2 for update;
begin
for v_emp in c loop
if(v_emp.sal <2000) then
update emp2 set sal =sal+1 where current of c ;
elsif(v_emp.sal>=2000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;
創建了存儲過程不代表運行了存儲過程;
運行此存儲過程 :
方式一 exec p;
方式二
begin
p;
end;
2、帶參數的存儲過程
in 相當於程序里的參數,供傳入用,在存儲過程不能改變其值;
out 相當於程序里的返回值,在存儲過程中可以為其賦值傳出;
in out 既可以當參數又可以當返回值用;
不帶上述說明符默認為in類型;
下例中v_a v_b 為in類型
v_c 為out類型
v_d 為in out 類型
create or replace procere p(v_a in number,v_b number,v_c out number,v_d in out number)
is
begin
if(v_a > v_b) then
v_c := v_a;
else
v_c := v_b;
end if;
v_d := v_d+1;
end;
---> 調試時:
可以在命令窗口調試,出錯時 用show errors 顯示出錯信息;
可以在plDv中調試;
---> 運行時:
可以在命令窗口運行:
declare
v_a number:=3;
v_b number:=4;
v_c number;
v_d number:=5;
begin
p(v_a,v_b,v_c,v_d);
dbms_output.put_line(v_c);
dbms_output.put_line(v_d);
end;
可以在plDv中調試;
E. Java如何實現對存儲過程的調用
import java.sql.*;
public class ProcereTest
{
public static void main(String args[]) throws Exception
{
//載入驅動
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//獲得連接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
//創建存儲過程的對象
CallableStatement c=conn.prepareCall("{call getsum(?,?)}");
//給存儲過程的第一個參數設置值
c.setInt(1,100);
//注冊存儲過程的第二個參數
c.registerOutParameter(2,java.sql.Types.INTEGER);
//執行存儲過程
c.execute();
//得到存儲過程的輸出參數值
System.out.println (c.getInt(2));
conn.close();
}
}
F. 如何調用存儲過程
過程:沒有返回值,select 不可能調用
調用過程有專門的語法:call 過程名([實參列表])
G. 怎麼調用存儲過程
DAL層寫個查詢方法
Public object Search()
{
SqlConnection conn = new SqlConnection("server=............");
SqlParameter[] meters = new SqlParameter[] { new SqlParameter("@Database",SqlDbType.NVarChar,10)};
meters[0].Value = "dataBaseName";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText="GetAllVehiNum";
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddRange(meters);
conn.Open();
object result = cmd.ExecuteScalar();
return result;
}
BLL 層寫調用它的方法
Public object Go()
{
return dal.Search();
}
展示層調用,this.lable1.Text=bll.Go().ToString();
H. 怎麼調用一存儲過程
EXECSP_INSERT_MOCTE_PL@GDDB,@GDDH,'5601','2013060005','000612','9001'
你不會調用帶參數的存儲過程嗎
I. JAVA中如何調用存儲過程
Connection conn = null;
CallableStatement cStmt = null;
PreparedStatement pStmt = null;
ResultSet rs = null;
conn = ConnectionManagerDao.getConn();
//關鍵代碼
cStmt = conn.prepareCall("{call proc_PagingVie(?,?,?,?,?,?,?,?,?) }");
//call 存儲過程名(?,?,?)-問號的是參數
J. Java中是如何調用存儲過程的(詳細代碼)
//存儲過程create or replace Procere countBySal(
p_sal emp.sal%type,
p_count OUT number
)as
begin
select count(*) into p_count from emp where sal >= p_sql;
end countBySal; //調用步奏import java.sql.CallableStatement; //帶哦用存儲過程所必須的語句借口
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;public class EmpUtil {
public static int countBySal(double sal) throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:test";
Connection cn=DriverManager.getConnection(url, "scott", "tiger");
String sql="{call countBySal(?,?)}";//調用存儲過程的語句,call後面的就是存儲過程名和需要傳入的參數
CallableStatement cst=cn.prepareCall(sql);
cst.setDouble(1, sal);//設置in參數的值
cst.registerOutParameter(2, Types.INTEGER);//注冊out參數的類型
cst.execute();
int result = cst.getInt(2);
cst.close();
cn.close();
return result;
}
public static void main(String[] args) {
int count;
try {
count = EmpUtil.countBySal(3000);
System.out.println("工資在3000元以上的人數為:"+count);
} catch (Exception e) {
e.printStackTrace();
}
}
}