最近筆試面試,多次被問到,雖然筆者不怎麼用,但是了解一下也是好的。
資料庫儲存過程
是一組預先建立並用指定的名稱儲存在資料庫伺服器上的 sql 語句
,將使用比較頻繁或者比較複雜的操作,預先用 sql 語句寫好並用乙個指定的名稱儲存起來
,以後當需要資料庫提供與已定義好的儲存過程的功能相同的服務時,只需再次執行該儲存過程。
通俗點的講就是一組為了完成特定功能的sql 語句
,類似一門程式語言,也包括了資料型別、流程控制、輸入和輸出和它自己的函式庫。
儲存過程可以說是乙個記錄集,它是由一些t-sql語句組成的**塊,這些t-sql語句**像乙個方法一樣實現一些功能(對單錶或多表的增刪改查),然後再給這個**塊取乙個名字,在用到這個功能的時候呼叫他就行了。
jdbc 中的callablestatement
物件為所有的關聯式資料庫管理系統 (rdbms: relational database management system) 提供了一種標準形式呼叫儲存過程的方法。對儲存過程的呼叫有兩種形式:帶結果引數和不帶結果引數。結果引數是一種輸出引數,是儲存過程的返回值。
兩種形式都可帶有數量可變的輸入(in 引數)、輸出(out 引數)或輸入和輸出(inout 引數)的引數。
使用 callablestatement 物件呼叫儲存過程的過程如下:
如果儲存過程返回結果集,則得到其結果集。
呼叫callablestatement.get***
方法從輸出引數 (out) 或者輸入輸出引數 (inout) 取值。
使用完callablestatement
物件後,使用callablestatement.close
方法關閉callablestatement
物件。
儲存過程名為 examplejdbc,含有五個引數,前兩個分別是 string 和 int 型別的輸入引數,後三個分別是整型,整型和字元型的輸出引數。
分別給輸入引數賦值 」beijing」 和 2008,執行 executeupdate 命令後,從後三個輸出引數中可以得到輸出值,沒有結果集返回。
connection con = null;..
.// create a callablestatement object
callablestatement cstmt = con.
preparecall
("call examplejdbc (?, ?, ?, ?, ?)"
);
cstmt.setstring (
1, 「beijing」)
;// set input parameter
cstmt.setint (2,
2008);
// set input parameter
cstmt.registeroutparameter (
3, types.integer)
; cstmt.registeroutparameter (
4, types.integer)
; cstmt.registeroutparameter (
5, types.varchar)
; cstmt.
executeupdate()
;// call the stored procedure
int goldnumber = cstmt.
getint(3
);// get the output parameter values
int silvernumber = cstmt.
getint(4
); string errorinfo = cstmt.
getstring(5
); cstmt.
close()
;
當儲存過程返回乙個結果集時,只需遍歷該結果集便可以得到儲存過程執行的所有結果。
callablestatement cstmt = null;
… boolean moreresultsets = cstmt.
execute()
; resultset rs1 = cstmt.
getresultset()
;while
(rs1.
next()
) system.out.
println
(rs1.
getstring(1
)+" "+ rs1.
getstring(2
));
當儲存過程返回多個結果集時,遍歷所有結果集才能得到執行的所有結果,使用 getmoreresults() 方法跳轉到下乙個結果集。
callablestatement cstmt = null;
… while (cstmt.
getmoreresults()
)
如果儲存過程返回多個結果集,每個結果集的資料結構都不一樣,或者某些結果集的資料結構未知,則可以使用getcolumnname()
方法來得到結果集中資料的列名。
callablestatement cstmt = null;
… boolean moreresultsets = cstmt.
execute()
;while
(moreresultsets)
} rs.
close()
; moreresultsets = cstmt.
getmoreresults()
;}
使用 jdbc 來呼叫儲存過程是最常見的一種方式,由於 jdbc 是最接近於資料庫的 api,因而其效率也是最高的。callablestatement 物件為所有的 dbms 提供了標準形式呼叫儲存過程的方法,對於要求實現靈活,執行效率要求比較高應用,直接採用 jdbc api 來實現儲存過程能很好地滿足需要。
操作sql命令
建立儲存過程
create procedure 儲存過程名(引數種類1 引數1 資料型別1,[...] begin 具體的procedure(處理) end
檢視資料庫中的儲存過程
show procedure status\g
檢視具體的儲存過程
show create procedure 儲存過程名\g
呼叫(執行)儲存過程
call 儲存過程名(引數1,...);
刪除儲存過程
drop procedure 儲存過程名
變數宣告
declare 變數名 資料型別;
變數賦值
set 變數名= ;
先到這,後面以後用到再學習總結。
資料庫之儲存過程
資料庫物件包括 表 索引 規圖 儲存過秳 觸發器 儲存過秳是資料庫重要的物件。是一組為了完成特定功能的sql詢句集。作用是 1.儲存過秳是在創造進行編譯的。之後每次執行儲存過程不需要重新編譯,而一般sql詢句需要每執行一次就編譯一次。2.當對資料庫迕行複雜操作時 如對多個表進行update,inse...
資料庫之儲存過程
儲存過程 stored procedure 是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,它儲存在資料庫中,一次編譯後永久有效,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。1.儲存過程的能力大大增強了sql語言的功能和靈活性。2.可保證資料的安全性和完整性...
資料庫之儲存過程
什麼是儲存過程?使用儲存過程的優缺點?儲存過程 stored procedure 是一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫 經過第一次編譯後再次呼叫不需要再次編譯 注意 使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。儲存過程是資料庫中的乙個重要物件,任...