存储函数(FUNCTION)

本文深入解析SQL存储函数的创建语法、使用方式及限制条件,并通过示例演示如何将存储函数作为SQL函数调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储函数的语法 
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;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值