编程开发之--Oracle数据库--存储过程和存储函数

Posted ZeroMZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程开发之--Oracle数据库--存储过程和存储函数相关的知识,希望对你有一定的参考价值。

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、使用存储过程和使用存储函数的一条简单非必要原则:如果只有一个返回值,使用存储函数的return子句返回;如果有多个返回值,则使用存储过程通过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参数可以返回结果集吗?

以上是关于编程开发之--Oracle数据库--存储过程和存储函数的主要内容,如果未能解决你的问题,请参考以下文章

懵懂oracle之存储过程2

Oracle中存储过程的作用和用法

oracle之存储过程中使用行锁的理解和正确的打开方式

数据库之Oracle

懵懂oracle之存储过程

oracle数据库之存储函数和过程