zoukankan      html  css  js  c++  java
  • 编程开发之--Oracle数据库--存储过程和存储函数(1)

    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参数可以返回结果集吗?

  • 相关阅读:
    CORE Computer Science Conference Rankings 转载
    推荐投稿的相关领域学术会议 zz
    计算机科学相关的国际会议排名及其汇总zz
    隐马尔科夫模型HMM自学(1)
    matlab mex gcc 支持c99
    计算机视觉牛人(转载)_utopialou_新浪博客
    SPECT、PET、CT与MRI成像原理及其特点的比较 转载
    一场雨我们的见证了什么?
    Java异常的概念和分类
    项目报错java.net.bindexception: address already in use: jvm_bind:8080
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/9189706.html
Copyright © 2011-2022 走看看