zoukankan      html  css  js  c++  java
  • 存储过程与存储函数

    一、存储过程和存储函数:指在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。

           相同点:完成特定功能的程序;

           区别:是否用return语句返回值。

    二、创建和使用存储过程

           用CREATE  PROCEDURE命令创建存储过程和存储函数。

           语法:

           create or replace procedure 过程名(参数列表)

           AS

           PLSQL子程序体;

           PL/SQL Developer中用dbms_output.put_line输出前需要执行命令set serveroutput on  可以通过键盘手动输入

           命令窗口执行

    create or replace procedure sayhelloword
    
    AS
    
    begin
    
      dbms_output.put_line('Hello World');
    
    end;

         先点击【添加调试信息】,再点击测试

         打开测试窗口开始调试:

         

          在DBMS中会有输出打印信息

          cmd连接oracle

         

        调用写好的存储过程,两种方法:

        1)exec  存储过程名字();

         2)使用PL/SQL程序

                  begin

                          存储过程名字();

                   End;

                  /结束

         

    --创建一个带参数的存储过程:
    --给指定的员工涨100块钱的工资,并且打印涨前和涨后的薪水
    create or replace procedure raisesalary(eno in number)
    as 
    --定义一个变量存储涨前的新书
     psal emp.sal%type;
    begin
     --得到员工涨前的薪水  
    --就是指psal这个变量是引用了表emp中的sal字段的类型。如果emp表中sal的类型变了,psal这个字段的类型也会跟着变化,
    总之,psal和表emp中sal字段类型一致。引用型变量可以不用知道该表中类型是什么,只要引用的表中的字段类型改变,定义的变量就跟着改变,
    用引用型变量易于维护。
    select sal into psal from emp where empno = eno; --给员工涨工资100 update emp set sal=sal+100 where empno = eno; --需不需要commit? --注意:一般不再存储过程或者存储函数中,commit或者rollback; --打印 dbms_output.put_line('涨前:'||psal||' 涨后:'||(psal+100));

      end;

      

       打印出信息:涨前:1000 涨后:1100

       

    三、存储函数

          函数(Function)为一个命名的存储程序,可带参数,并返回一个计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。

          创建函数的语法

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

               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;
    /

        In 和 out参数

        1一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值,而存储过程没有返回值。

        2过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。

       什么时候用存储过程或存储函数?

       原则:如果只有一个返回值,用存储函数;否则,就用存储过程。

       - -out参数:查询某个员工姓名,月薪,职位

      

    create or replace procedure queryEmpInfo(eno in number,
                                             pname out varchar2,
                                             psal  out number,
                                             pjob  out varchar2)
    as 
    begin
      select ename,sal,empjob into pname,psal,pjob from emp where empno=eno;
    end;

    doc命令,desc 表名 会得到表结构

    ---???思考问题,如果查询某个原工的所有信息---àout参数太多?

    ---???查询某个部门中所有原工信息---àout中返回集合?

    未完,待续。。。。。

  • 相关阅读:
    Win7安装软件,装到microsoft.vc90.crt时卡住的解决办法
    转:如何利用已有的切片文件生成TPK
    转:ACCESS数据库转ORACLE数据库分享
    转:ITopologicalOperator Buffer调用异常的解决方法(来源网络)
    转:【制图】如何表现道路上下层级间的真实关系
    oracle 递归查询(来源于网络)
    Sde各类命令详解(sdemon 、sdelayer、sdeservice、sdetable、sdeconfig、SdeExport_SdeImport)
    GIS中的坐标系定义与转换
    转:Oracle优化总结
    转:ArcGIS提取面状道路中心线(转载)
  • 原文地址:https://www.cnblogs.com/person008/p/9145332.html
Copyright © 2011-2022 走看看