• PL/SQL编程-存储过程


    概念:

            存储过程,简称“存储”或者“存过”,是一种命名的PL/SQL程序块,也是工作中用到最多的命名块,数据库中的大多数程序都是以存储过程的形式存放在数据库里。相较于匿名块,存储过程(及其他命名块)有个非常大的不同:存储过程在开始调用时,可以传入一些输入参数,存储过程会依据输入参数来决定程序如何运行,而且在调用结束时,存储过程还会根据程序运行情况返回一些输出参数。存储过程不能被SQL语句直接调用,需要通过EXECUTE命令调用或通过PL/SQL块调用。因为存储过程是已经在数据库中编译好的程序,所以会比普通的匿名块运行效率更高。

    参数:分为IN、OUT和IN OUT三种

    1.IN参数(输入参数)

    IN模式参数是一种输入类型的参数,用于接收调用方写入的实参。它是数据库最常见也是默认的一种参数。

    语法:

    CREATE [OR REPLACE] PROCEDURE PRO_NAME (

                               I_NAME1 [IN] DATA_TYPE DEFAULT DEF_VAL,

                               I_NAME2 [IN] DATA_TYPE DEFAULT DEF_VAL,

                                            ...

                                            )

     IS|AS

    2.OUT(输出参数)

    OUT模式参数是一种输出类型的参数,这个参数在程序调用过程中会被赋予内容,并在调用结束后返回该值。

    实际项目中,OUT参数常常用来返回存储过程的执行状态,比如用0表示执行成功,用1表示执行失败。其他类型的返回内容往往是在后续将要学到的存储函数中出现。

    OUT参数在调用时需要给予相应数量的变量用来接收返回值,所以在调用带有OUT参数的存储过程时,往往是通过TEST窗口或者PL/SQL匿名块来调用。

    Ps:OUT参数在声明时必须加上OUT关键词,否则会被认作IN参数。

    3.IN OUT参数(输入输出参数)

    IN参数能够用来接收调用方传入的内容,OUT参数能够用来接收存储过程返回的内容,二者各司其职、互不干扰,但从某种角度来说,也是造成了参数浪费。而IN OUT参数则是结合了两者的优势,它既能在程序调用时用来接收传入的内容,在程序运行过程中也能用来接收返回内容,实现了“一参两用”。

    Ps:

    IN OUT参数在声明时必须加上IN OUT关键词,否则会被认作IN参数;

    IN OUT参数无论是在输入时还是输出时,都只有一个数据类型。

    实例:

    --输入一个日期,返回这个日期所在月的最后一天
    CREATE OR REPLACE PROCEDURE SP_LASTDAY(I_DATE VARCHAR2,O_DATE OUT VARCHAR2)
    IS
    V_ERRM varchar2(50);
    BEGIN
      --判断输入格式是否正确
      IF LENGTH(I_DATE)<>8 THEN
        DBMS_OUTPUT.PUT_LINE('输入格式不对,正确格式:YYYYMMDD');
      END IF;
      O_DATE:=LAST_DAY(TO_DATE(I_DATE,'YYYY-MM-DD'));
      DBMS_OUTPUT.PUT_LINE('该日期的月末日期为:'||O_DATE);
      EXCEPTION
        WHEN OTHERS THEN
          V_ERRM:=SQLERRM;
          DBMS_OUTPUT.PUT_LINE(V_ERRM);
    END SP_LASTDAY;
    --调用这个存储过程
    --1
    DECLARE
    V_DATE VARCHAR2(25);
    BEGIN
      SP_LASTDAY('20220101',V_DATE);
    END;

  • 相关阅读:
    项目(模块1:用户登陆流程分析)
    C语言典范编程
    基于减法平均算法的无人机航迹规划-附代码
    Python函数递归
    JMeter性能分析实战一:日常登录接口
    类加载过程
    51单片机存储篇:EEPROM(I2C)
    神经网络和深度学习-梯度下降Gradient Descent(下)
    ClickHouse 数据类型、表引擎与TTL
    【33. 0 1 背包问题】
  • 原文地址:https://blog.csdn.net/lxslf/article/details/127720278