子程序(存储+函数)

子程序

  • 定义
已经命名的PL/SQL块,预编译在内存中,
提高代码的运行效率,封装可以重复调用,方便维护。
  • 分类
过程
    Procedural  执行PL/SQL块的
函数
    function 执行PL/SQL块的返回值 return
  • 组成
 创建部分
     create procedural/function 命名;
 执行部分
     begin ... end;
 异常部分(可选)
     exception when 异常类型 then 异常处理;
  • 优点
 提高代码的运行效率,可以重复调用,方便维护

过程(Procedure)

in    输入参数(默认)
out    输出参数
in out    输入,输出参数

备注:当指定参数数据类型时,不能指定该参数类型的长度(number,scott.dept.deptno%type可以)。

语法

create [or replace] Procedure 过程名字 (变量名1 in out 变量类型1 default null,变量名2 in/out 变量类型2,...);
as||is
变量名称1  变量类型1;
变量名称2  变量类型2;
...
begin
    //代码执行部分
    exception when 异常类型 then 异常处理
end

调用:

a.
SQL>set serveroutput on  
SQL>**exec** procedure_name;(有参数时要带括号)  
b.
SQL>set serveroutput on  
SQL>**call** procedure_name();  
c.
declare  
begin  
      procedure_name;(有参数时要带括号)  
end;

函数(Procedure)

有返回值的子程序 return

语法

create [or replace] function 函数名字(变量名1,变量类型1,...)
return 返回类型(必须返回值)
as
--定义变量
...
begin
    --执行的代码
    ...
    return 返回值;
    exception when 异常类型 then 异常处理;
end

调用

a.
declare  
       v1 varchar2(100);  
begin  
       --v1:=get_user;  
       --v1:=get_user();  
       dbms_output.put_line(get_user());  
end;  
b.
select get_user from dual; 
  1. 函数调用是有限制的,只能作为表达式的一部分调用
  2. 在SQL语句中调用的函数只能带有输入参数,其他的不行,且只能使用SQL所支持的标准数据类型,而不能使用PL/SQL中的特有数据类型(boolean,table,record等)。

子程序的其他特征

删除函数:
drop function 函数名;
删除过程:
drop Procedure 过程名;
授予其他用户执行子程序的权限:
grant execute on 子程序名 to 用户名;
过程和函数都是对象,它们在定义的时候名字不能相同

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容