這是我學習mysql存儲過程時關心的幾個點內容,希望能對你們學習存儲過程有所幫助。
語法:
create procedure sp_name ([proc_parameter[,...]])
[characteristic ...]
begin
.......
end
Proc_parameter:存儲過程的參數列表,多個參數彼此間用逗號分隔
格式[IN|OUT|INOUT] param_name type
IN(輸入參數)、OUT(輸出參數)、INOUT(輸出參數和輸入);
Param_name為參數名;
type為參數的數據類型。
Characteristic:用於描述存儲特征
存儲過程使用邏輯語法:
邏輯判斷:
1、if判斷
IF expression THEN commands
[ELSEIF expression THEN commands]
[ELSE commands]
END IF;
2、case判斷
CASE case_expression
WHEN when_expression THEN commands
WHEN when_expression THEN commands
ELSE commands
END CASE;
循環判斷:
1、WHILE……DO……END WHILE
2、REPEAT……UNTIL END REPEAT
3、LOOP……END LOOP
4、GOTO
Java對存儲過程操作
1、獲取存儲過程輸出值
--存儲過程SQL
create procedure tb_pro(out op int) begin set op = 10 end
java操作:
CallableStatement cs = con.prepareCall(sql); cs.registerOutParameter(1, java.sql.Types.INTEGER);//注冊存儲過程的out型參數類型;使用之前必須注冊; cs.execute(); System.out.println(cs.getInt(2)); //獲取out的輸出結果
2、獲取查詢結果集(來自select查詢),且有多個結果集如何處理?
-- 存儲過程SQL
create procedure bach_pro() begin select * from table1; select * from table2; end
java操作:
CallableStatement cs = con.prepareCall(sql); cs.execute(); ResultSet resultSet = cs.getResultSet(); //遍歷第一個結果集 while(resultSet.next()){ System.out.println(resultSet.getInt(1)); // 輸出結果集 } //獲取下一個結果集 ResultSet rs2; while(cs.getMoreResults()){ rs2 = cs.getResultSet(); while (rs2.next()) { System.out.println(rs2.getInt(1)); //輸出結果集列 } }
3、當我們要在存儲過程中處理查詢結果集時,我們就需要使用到cursor,下面是cursor一個簡單的使用例子
begin declare stop int default 0 ;--需要在cursor前聲明參數 declare id_temp int; declare cur1 cursor for (select id from xinguan); declare continue handler for not found set stop = 1; --聲明cursor掃描完后設置值,用於結束循環 open cur1; cur1_loop:loop fetch cur1 into id_temp; --從cursor中取值賦給變量 if stop then leave cur1_loop; end if; end loop cur1_loop; close cur1; end