存储包(PACKAGE)

存储包的语法 
Sql代码   收藏代码
  1. ●包规格部  
  2. CREATE OR REPLACE PACKAGE 包名 { AS | IS }  
  3. 存储过程定义;  
  4. 存储函数定义;  
  5. 变量定义;  
  6. 数据类型定义;  
  7. 异常定义;  
  8. 游标定义;  
  9. END [ 包名 ];  
  10.   
  11. ●包本体  
  12. CREATE OR REPLACE PACKAGE BODY 包名 { AS | IS }  
  13. 针对包规格部の存储过程定义的程序;  
  14. 针对包规格部の存储函数定义的程序;  
  15. 只能在包本体内部调用的存储过程程序;  
  16. 只能在包本体内部调用的存储函数程序;  
  17. END [包名];  

存储包由包规格部和包本体两部分构成。 

●包规格部 
定义可以从包外部或包全局访问的存储过程、存储函数、变量、异常、数据类型、游标。 
只对存储过程、存储函数的接口进行定义,而在包本体中才对存储过程、存储函数进行具体实现。 

●包本体 
针对包规格部中定义的存储过程、存储函数进行具体实现。 
或者编写只能在包本体内部访问的存储过程、存储函数。 

示例1)包规格部的定义 
Sql代码   收藏代码
  1. create or replace package dept_utl as  
  2.    
  3.   -- 函数 get_dept_name 的定义  
  4.  function get_dept_name(v_dept_id in charreturn varchar2;  
  5.   -- 过程 insert_dept的定义  
  6.  procedure insert_dept(v_dept_id in char,v_dept_name in varchar2);  
  7.   -- 异常 e_deptNotFound 的定义  
  8.  e_deptNotFound exception;  
  9.    
  10. end dept_utl;  


示例2)包本体的定义 
Sql代码   收藏代码
  1. create or replace package body dept_utl as  
  2.    
  3.  -- 函数 get_dept_name 的本体  
  4.  function get_dept_name(v_dept_id in charreturn varchar2 as  
  5.   v_dept_name varchar2(10);  
  6.  begin  
  7.   select dept_name into v_dept_name from dept   
  8.    where dept_id = v_dept_id;  
  9.   if sql%notfound then  
  10.    raise e_deptNotFound;  
  11.   end if;  
  12.   return v_dept_name;  
  13.  end get_dept_name;  
  14.    
  15.  -- 过程 insert_dept 的本体  
  16.  procedure insert_dept(v_dept_id in char,v_dept_name in varchar2) as  
  17.  begin  
  18.   insert into dept values(v_dept_id,v_dept_name);  
  19.   commit;  
  20.  end insert_dept;  
  21.    
  22. end dept_utl;  


示例3)从SQL中调用上述包的函数[get_dept_name] 
Sql代码   收藏代码
  1. SQL> select dept_utl.get_dept_name('D01'from dual;  
  2.    
  3. DEPT_UTL.GET_DEPT_NAME('D01')  
  4. -----------------------------------------------------------------------  
  5.    
  6. 总务  
  7.    
  8. SQL>  


示例4)从匿名块中执行上述包中的存储过程。 
Sql代码   收藏代码
  1. declare  
  2.    
  3. begin  
  4.    
  5.  dept_utl.insert_dept('D04','营业');  
  6.    
  7. end;  

你可能感兴趣的:(sql,存储,insert)