Oracle开发包


建立包规范

  1. create or replace package emp_package is  
  2.   g_deptno number(3):=30;  
  3.   procedure add_employee(eno number, ename varchar2,sal number,dno number default g_deptno);  
  4.   procedure fire_employee(eno number);  
  5.   function get_sal(eno number)return number;  
  6. end emp_package;---end 后面可以跟定义的名称   

建立包体

  1. create or replace package body emp_package is  
  2.   function validate_deptno(v_deptno number)return boolean is       ----validate_deptno   
  3.   v_temp int;  
  4. begin  
  5.   select 1 into v_temp from dept where deptno=v_deptno;  
  6.   return true;  
  7. exception  
  8.   when no_data_found then return false;  
  9. end validate_deptno;  
  10. procedure add_employee(eno number, ename varchar2,sal number,dno number default g_deptno)is---add_employee   
  11. begin  
  12.   if validate_deptno(dno)then   
  13.      insert into emp(empno,ename,sal,deptno)values(eno,ename,sal,dno);  
  14.   else  
  15.      RAISE_ApPLICATION_ERROR(-20000,'不存在该部门');  
  16.   end if;  
  17. exception  
  18.   when dup_val_on_index then RAISE_APpLICATION_ERROR(-20011,'该雇员已存在');  
  19. end add_employee;  
  20. procedure fire_employee(eno number)is            --------fire_employee   
  21. begin  
  22.   delete from emp where empno=eno;  
  23.   if sql%notfound then   
  24.     RAISE_APPLICATION_ERROR(-20012,'该雇员不存在');  
  25.   end if;  
  26. end fire_employee;  
  27. function get_sal(eno number)return number is ---get_sal   
  28.   v_sal emp.sal%type;<pre name="code" class="sql">create or replace package body emp_package is  
  29.   procedure add_employee(eno numberk,ename varchar2,salary number,dno number default g_deptno)is  
  30. begin  
  31.   if validate_deptno(dno)then  
  32.     insert into emp(empno,ename,sal,deptno)values(eno,ename,salary,dno);  
  33.   else  
  34.     raise_application_error(-20010,'不存在该部门');  
  35.   end if;  
  36. exception   
  37.   when dup_val_on_index then  
  38.     raise_application_error(-20011,'该雇员已存在');  
  39. end;  
begin select sal into v_sal from emp where empno=eno; return v_sal;exception when no_data_found then RAISE_ApPLICATION_ERROR(-20012,'该雇员不存在');end get_sal;end emp_package;

调用包组件

1.在同一个包内调用
  1. create or replace package body emp_package is<pre name="code" class="sql">  
procedure add_employee(eno numberk,ename varchar2,salary number,dno number default g_deptno)isbegin if validate_deptno(dno)then insert into emp(empno,ename,sal,deptno)values(eno,ename,salary,dno); else raise_application_error(-20010,'不存在该部门'); end if;exception when dup_val_on_index then raise_application_error(-20011,'该雇员已存在');end;

2.调用公用变量
  1. declare  
  2. begin  
  3.  emp_package.g_deptno:=21;  
  4. end;  
3.调用公用过程
  1. declare  
  2. begin  
  3.  emp_package.add_employee(1212,'yang',2000,10);------部门不给值会报错   
  4.  emp_package.add_employee(2121,'tender',2000,20);  
  5. end;  
4.调用公用函数
  1. declare  
  2.  salary number;  
  3. begin  
  4.  salary:=emp_package.get_sal(7788);  
  5.  dbms_output.put_line(salary);  
  6. end;  
----当使用其他用户身份调用公用组件时,必须在组件名前加用户名和包名作为前缀
----SCOTT.EMP_PACKAGE.。。。。


----当调用远程数据库包的公用组件是,在组件名前加包名作为前缀在组件名后需要带有数据库链名作为后缀
----EMP_PACKAGE.ADD_EMPLOYEE@TENDER(1111,'SCOTT',1233,10)
----查看源代码
----select text from user_source where name='emp_package'and type='package'
  • 1
  • 2
  • 下一页

相关内容