1、存储过程和存储函数

描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程、存储函数

区别:存储函数可以通过return子句返回一个函数的值

(1)存储过程

     语法:create [or replace] PROCEDURE 过程名(参数列表)

                AS

                PLSQL子程序体;

     存储过程的调用方式:

         a)exec/execute 过程名();

         b)begin

                 过程名();

                 过程名();

             end;

              /

       带参数的存储过程:

           举例:为指定的员工涨100块钱工资,并且打印涨前以及涨后的工资。

               在sql developer中创建带参数的存储过程:

create or replace PROCEDURE raisesalary(eno in number)
as
  --定义一个变量保存涨前的薪水
  psal emp.sal%type;
begin
  --得到员工涨前的薪水
  select sal into psal from emp where empno=eno;
  
  --给该员工涨100
  update emp set sal=sal+100 where empno=eno;
  
  --注意:一般不在存储过程或者存储函数中,commit和rollback。
  
  --打印
  DBMS_OUTPUT.PUT_LINE('涨前:'||psal||'涨后:'||(psal+100));
end;
/

           使用sql developer调试调用plsql程序:

               

               

           如果缺少权限,可以使用数据库超管赋予当前用户权限:

           

           

 (2)存储函数

        语法:

             create [or replace] FUNCTION 函数名(参数列表)

             return  函数值类型

             AS

             PLSQL子程序体;

         举例:查询某员工的年收入

create or replace FUNCTION queryempincome(eno in number)
return number
as
  --定义一个变量保存员工的薪水和奖金
  psal emp.sal%type;
  pcomm emp.comm%type;
begin
  --得到员工的月薪和奖金
  select sal,comm into psal,pcomm from emp where empno=eno;
  
  --直接返回年收入
  return psal*12+nvl(pcomm,0);
end;
/

2、使用存储过程和使用存储函数的一条简单非必要原则:如果只有一个返回值,使用存储函数;如果有多个返回值,则使用存储过程;

     都可以有多个out参数!

create or replace PROCEDURE queryempinform(eno in number,
                                           pename out varchar2,
                                           psal out number,
                                           pjob out varchar2)
as
begin
  --得到员工的姓名、月薪、职位
  select ename,sal,job into pename,psal,pjob from emp where empno=eno;
end;

  问题思考:

        a)如果查询某人的所有字段信息(并且字段比较多)?

        b)如何返回多条符合条件的结果集,out参数可以返回结果集吗?

版权声明:本文为ZeroMZ原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ZeroMZ/p/9189706.html