1. 程式人生 > >三、存儲過程(Stored Procedure)與遊標(Cursor)

三、存儲過程(Stored Procedure)與遊標(Cursor)

行數據 exceptio 結構 行數 into 完成 num replace 多個

一、存儲過程

  一組為了完成特定功能的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)