資料庫之儲存過程

2021-08-28 06:12:17 字數 3532 閱讀 5128

最近筆試面試,多次被問到,雖然筆者不怎麼用,但是了解一下也是好的。

資料庫儲存過程一組預先建立並用指定的名稱儲存在資料庫伺服器上的 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 語句集,經編譯後儲存在資料庫 經過第一次編譯後再次呼叫不需要再次編譯 注意 使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。儲存過程是資料庫中的乙個重要物件,任...