三、存儲過程(Stored Procedure)與遊標(Cursor)
一、存儲過程
一組為了完成特定功能的SQL語句集,經編譯後存儲在數據庫中,用戶通過指定存儲過程的名字並給出參數,來執行它。
在大型數據庫中,存儲過程和觸發器具有重要的作用。無論是存儲過程還是觸發器,都是SQL語句和流程控制語句的集合。
存儲過程的優點:
1、存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需要重新編譯,一般的SQL語句執行一次就要編譯一次,所以使用存儲過程可以提高數據庫執行速度。
2、當對數據庫進行復雜操作時(比如對多個表進行CRUD時),可以將復雜的CRUD操作用存儲過程封裝起來與數據庫提供的事務處理結合在一塊使用。
3、存儲過程可以重復使用,可以減少數據庫開發人員的工作量。
4、存儲過程安全性搞,可以設定只有某個用戶才具有對指定存儲過程的使用權。
Oracle的存儲過程分為兩種:系統存儲過程和自定義存儲過程。
系統存儲過程:Oracle預先提供的一組完成特功能的存儲過程,安裝完Oracle 就有。
自定義存儲過程:
Create [Or Replace] Procedure 過程名[參數[in/out/in out]]
AS/IS
說明部分
BEGIN
可執行部分
[EXCEPTION 錯誤處理部分]
END [過程名];
註:可選的replace:表示如果存儲過程已經存在,則用新的存儲過程覆蓋掉原來的,常用語存儲過程的重建。
參數部分:用於定義多個參數(如果沒有參數,可以不寫),參數有三種形式:IN,OUT,INT OUT。一般沒有指定參數形式的話,默認為IN。
關鍵字AS也可以寫成IS,後面跟存儲過程的說明部分,也可以在這塊定義存儲過程的局部變量。
刪除存儲過程: DROP PROCEDURE 存儲過程名;
--創建一個統計產品表總數的存儲過程 CREATE OR REPLACE PROCEDURE product_count AS PRODUCT_SUM NUMBER(10); BEGIN SELECT COUNT(*) INTO PRODUCT_SUM FROM product_table; DBMS_OUTPUT.PUT_LINE(‘產品數量是:‘||PRODUCT_SUM); END;
二、遊標(Cursor)
遊標:一種PL/SQL控制結構,對SQL語句的處理進行顯示控制,便於對表的行數據逐條進行處理。,遊標只存留在內存中。一般使用方法是:聲明遊標--->打開遊標--->取出結果--->關閉遊標。
一般使用for循環來操作遊標
三、存儲過程(Stored Procedure)與遊標(Cursor)