包用於在邏輯上組合過程和函數,它由包規范和包體兩部分組成。
1)、我們可以使用create package命令來創建包,如:
i、創建一個包sp_package
ii、聲明該包有一個過程update_sal
iii、聲明該包有一個函數annual_income
--聲明該包有一個存儲過程和一個函數
create package sp_package is
procedure update_sal(name varchar2, newsal number);
function annual_income(name varchar2) return number;
end;
2)、建立包體可以使用create package body命令
給包sp_package實現包體
CREATE OR REPLACE PACKAGE BODY SP_PACKAGE IS
--存儲過程
PROCEDURE UPDATE_SAL(NAME VARCHAR2, NEWSAL NUMBER) IS
BEGIN
UPDATE EMP SET SAL = NEWSAL WHERE ENAME = NAME;
COMMIT;
END;
--函數
FUNCTION ANNUAL_INCOME(NAME VARCHAR2) RETURN NUMBER IS
ANNUAL_SALARY NUMBER;
BEGIN
SELECT SAL * 12 + NVL(COMM, 0) INTO ANNUAL_SALARY FROM EMP WHERE ENAME = NAME;
RETURN ANNUAL_SALARY;
END;
END;
/
3)、如何調用包的過程或是函數
當調用包的過程或是函數時,在過程和函數前需要帶有包名,如果要訪問其它方案的包,還需要在包名前加方案名。如:
--調用存儲過程
SQL> exec sp_package.update_sal('SCOTT', 8888);
--調用函數
var income NUMBER;
CALL sp_package.ANNUAL_INCOME('SCOTT') INTO:income;
print income;
特別說明:包是pl/sql 中非常重要的部分,我們在使用過程分頁時,將會再次體驗它的威力呵呵。
觸發器
觸發器是指隱含的執行的存儲過程。當定義觸發器時,必須要指定觸發的事件和觸發的操作,常用的觸發事件insert,update,delete 語句,而觸發操作實際就是一個pl/sql 塊。可以使用create trigger 來建立觸發器。
特別說明:我們會在后面詳細為大家介紹觸發器的使用,因為觸發器是非常有用的,可維護數據庫的安全和一致性。