• 存储过程与存储函数


    一、存储过程

    1、语法如下:

    create [or replace] Procedure 名称
    as
    PLSQL子程序体;

    2、栗子:

    简单的栗子

    1、创建

    --第一个存储过程 打印一个Hello World
    create or replace PROCEDURE SayHelloWorld--如果存在就修改
    as
    --说明部分
    begin
    DBMS_OUTPUT.PUT_LINE('Hello World');--注意这里用单引号
    end;

    2、调用方式:

    2.1、exec SayHelloWorld
    2.2、begin
    SayHelloWorld();
    SayHelloWorld();
    end;
    /

    命令打开Oracle,打印

     带参数的存储过程

     举例:为指定的同学,增加学费,并打印出增加前后的学分。

    create or replace procedure raisesagrade(eno in number)--in 表示输入参数
    as
    --定义一个变量
    psal  emp.sal%type; --emp是一张表
    begin
    --得到学生添加前的学分
    select sal into psal from EMP where empno=eno;
    --给学生增加学分
    update emp set sal=sal+100 where empno=eno;
    --需不需要commit
    --一般不在存储过程或者存储函数中提交或者回滚,因为不能保证在恰当时候执行
    --打印
    dbms_output.put_line('增加前:'||psal|| '增加后:'||(psal+100));
    
    end;

    调用方式:

    begin
    raisesagrade(7369);
    raisesagrade(7499);
    commit;
    end;
    /

    二、存储函数

    1、创建语法如下:

    create [or replace] FUNCTION 函数名(参数列表)
    return 函数值类型
    AS
    PLSQL子程序体;

    2、栗子

    2.1、创建

    --存储函数  查询某个员工的年收入
    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+pcomm;--输出表达式中如果有空值,那么这个表达式最后就是为空值。
       return psal*12+nvl(pcomm,0);
      end;

    2.2、调用

     DECLARE
     ENO NUMBER;
     v_Return NUMBER;
     BEGIN 
       ENO:=7369;
       v_Return:=queryempincome(ENO=>ENO);
       DBMS_OUTPUT.PUT_LINE('v_Return='||v_Return);
       v_Return:=v_Return;
     END;

    2.3、运行结果

    v_Return=13200

    三、in和out参数

    1、存储过程、存储函数与out参数的关系

  • 相关阅读:
    setTimeout,setInterval你不知道的…
    浏览器console的用法
    命题和命题的否定可以同时成立吗?
    Web云笔记--CSS
    dreamweaver代码提示失效
    游戏平台代表--PS4【推荐】
    Mac上好用的视频播放器有哪些?
    新浪博客“网络繁忙请稍后再试”
    人工智能成功识别“色情暴力”信息??…
    JS查错小工具-三生有幸【推荐】
  • 原文地址:https://www.cnblogs.com/xielianghui/p/7449461.html
Copyright © 2020-2023  润新知