一、預存程序:
a)
預存程序和函數也是一種PL/SQL塊,是存入資料可的PL/SQL塊。但預存程序是以命名的方式儲存與資料庫中;
b)
預存程序的優點:
i. 預存程序和函數以命名的資料庫物件形式儲存與資料庫中。
ii.
預存程序和函數可由資料庫提供安全保證,想要使用預存程序和函數,需要有預存程序的所有者的授權,只有被授權的油壺或建立這本身才能執行預存程序或回呼函數。
iii.
預存程序和函數的資訊是寫入資料庫字典的,1所以預存程序可以看做是一個公用用模組。
iv.
像其他進階語言的過程和函數一樣。可以傳遞參數給預存程序或函數。
c)
預存程序和函數需要進行編譯,以排除語法錯誤,只有編譯通過才能調用。
二、建立預存程序
a)
建立預存程序,需要有CREATE PROCEDURE 或 CREATE ANY PROCEDURE的系統許可權。該許可權可有系統管理員授予。
b)
CREATE [OR REPLACE] PROCEDURE 預存程序名[(參數[IN|OUT|IN OUT]資料類型…)]{AS|IS}
BEGIN
可執行部分
[EXCEPTION 錯誤處理部分]
END[過程名];
c)
關鍵字
i. OR REPLACE表示如果預存程序已經存在,則用新的預存程序覆蓋,通常用於預存程序的重建。
ii.
參數部分用於定義多個參數(如果沒有參數,就可以省略)。參數有三種形式:IN、OUT和
IN OUT。如果沒有指明參數的形式,則預設為 IN。
iii.
關鍵字 AS也可以寫成 IS,後跟過程的說明部分,可以在此定義過程的局部變數。
三、調用預存程序
a)
方法
i. EXECUTE
模式名.預存程序名[(參數…)];
ii.
BEGIN
模式名.預存程序名[(參數…)]
END;
b)
傳遞的參數必須與定義的參數類型、個數和順序一致(如果參數定義預設值,則調用時可以省略參數),參數可以是變數。常量或運算式。
c)
例:建立一個顯示僱員總人數的預存程序,並執行該預存程序
Create or replace procedure emp_count --建立預存程序
Is
v_total number(10);--聲明變數,但這裡不能寫declare來定義
beging
select count(*) into v_total from emp;
dbms_output.put_line(‘僱員人數為:’||v_total);
end;
--執行預存程序
execute emp_count
d)
例:編寫顯示僱員資訊的預存程序EMP_LIST,並引用EMP_COUNT預存程序。
Create or replace procedure emp_list--建立預存程序
Is
Cursor c is
select empo,ename,sal from emp;
begin
for v_emp in c loop
dbms_output.put_line(v_emp.empno||’,’||v_emp.ename||’,’||v_emp.sal);
end loop;
emp_count;
end;
--執行預存程序
execute emp_list;