一個完整包的開發例項
CREATE OR REPLACE PACKAGE emp_pkg AS
--宣告一個過程
PROCEDURE add_emp(emp_record emp%Rowtype);
--宣告一個函式
FUNCTION get_info(eno emp.empno%TYPE)
RETURN emp%ROWTYPE;
END;
/
CREATE OR REPLACE PACKAGE BODY emp_pkg IS
--過程定義
PROCEDURE add_emp(emp_record emp%Rowtype)IS
--自定義一個異常
e_2291 EXCEPTION;
--異常和錯誤編號關聯
PRAGMA EXCEPTION_INIT (e_2291,-2294);
BEGIN
INSERT INTO emp VALUES emp_record;
EXCEPTION
WHEN dup_val_on_index THEN
RAISE_application_error(-20010,'僱員編號不能重複');
WHEN dup_val_on_index THEN
RAISE_application_error(-2011,'部門不存在');
END;
--函式定義
FUNCTION get_info(eno emp.empno%TYPE) RETURN emp%ROWTYPE IS
emp_record emp%ROWTYPE;
BEGIN
SELECT*INTO emp_record FROM emp WHERE empno=eno;
RETURN emp_record;
EXCEPTION
WHEN no_data_found THEN
raise_application_error(-20010,'僱員不存在');
END;
END emp_pkg;
/
--呼叫包中的過程
DECLARE
emp_record emp%ROWTYPE;
BEGIN
emp_record.empno:=&eno;
emp_pkg.add_emp(emp_record);
END;
/
--呼叫包中的函式
DECLARE
emp_record emp%ROWTYPE;
BEGIN
emp_record:=emp_pkg.get_info(&eno);
END;