存储函数(FUNCTION)

存储函数的语法 
Sql代码   收藏代码
  1. CREATE OR REPLACE FUNCTION 函数名  
  2. [ (参数变量1 [ IN | OUT | INT OUT ] 数据类型,  
  3. :  
  4. 参数变量n [ IN | OUT | INT OUT ] 数据类型) ]   
  5. RETURN 数据类型 { AS | IS }  
  6.   
  7. /* 声明部分 */  
  8. BEGIN  
  9. /* 可执行部分 */  
  10. EXCEPTION  
  11. /* 异常处理部分 */  
  12. END [ 函数名 ];  


与存储过程类似,不同之处是有返回值。 

给返回值(RETURN)指定的数据类型,不可指定长度。 
例) 
× return char(2) 
○ return char 

函数可以作为SQL函数从SQL中调用,但是有以下限制: 
△ 不可改变数据库表。 
△ 经由数据库连接的访问以及并行执行的场合, 
不可对包变量的值进行读写操作(针对存储包内部的函数)。 

示例1 以参数[v_dept_id]为键值,从表[dept]中取得列值[dept_name]并返回。 
Sql代码   收藏代码
  1. create or replace function get_dept(  
  2.  v_dept_id in char)   
  3.  return varchar2 as  
  4.    
  5.  v_dept_name varchar2(10);  
  6.    
  7. begin  
  8.    
  9.  select dept_name into v_dept_name from dept   
  10.   where dept_id = v_dept_id;  
  11.  return v_dept_name;  
  12.    
  13. end get_dept;  


示例2 把示例1的存储函数作为SQL函数而调用。 
Sql代码   收藏代码
  1. SQL> select get_dept('D01'from dual;  
  2.    
  3. GET_DEPT('D01')  
  4. -----------------------------------------  
  5.    
  6. 总务  
  7.    
  8. SQL>  


示例3 从匿名块中调用示例1中的存储函数。 
Sql代码   收藏代码
  1. declare  
  2.    
  3.  dept_name varchar2(10);  
  4.    
  5. begin  
  6.    
  7.  dept_name := get_dept(v_dept_id => 'D01');  
  8.  dbms_output.put_line(dept_name);  
  9.    
  10. end;  

你可能感兴趣的:(sql,数据库,function,存储)