• PLSQL 语言 异常 函数 存储过程


    异常使用的实例

    查询student表里面的ID 为1 的那条记录,给其设置权限,不让其显示信息

    DECLARE
      IDS NUMBER;
      B   STUDENT%ROWTYPE;
      EXC EXCEPTION; --定义一个异常
    BEGIN
      /* 如果有一个变量b ,可以SELECT S.NAME INTO B FROM STUDENT S WHERE S.ID = 3;
      把其name 赋值给b*/
      /* 终止本次循环,继续下次循环  continue;
      打断循环 exit;
      终止当前执行的整个程序  return ;*/
    
    
     IDS := 1;
      IF IDS = 1 THEN
        RAISE EXC; --抛出异常
      END IF;
    
      SELECT * INTO B FROM STUDENT ST WHERE ST.ID = IDS;
      DBMS_OUTPUT.PUT_LINE(B.NAME || ',' || B.SEX || ',' ||
                           TO_CHAR(B.BIRTHDAY, 'yyyy'));
    EXCEPTION
      WHEN EXC THEN
        DBMS_OUTPUT.PUT_LINE('权限不够');
    END;
    

    函数  (有返回值)

    CREATE OR REPLACE FUNCTION MYTEST(A IN INTEGER, B OUT INTEGER)
      RETURN INTEGER AS
    
    BEGIN
      IF A < 0 THEN
        B := A;
        RETURN B;
      END IF;
      RETURN A; /*  输入型参数--in, 用于程序体里参与计算的逻辑
                    b 没有参与运算,只是赋了值   输出型参数--out, 用于返回多个值  ,同一个值包含着不同的类型*/
    END;
    

    调用

    DECLARE
      A INTEGER := 2;
      B INTEGER;
      C INTEGER;
    BEGIN
       c:= mytest(a,b);
      dbms_output.put_line(c);
      dbms_output.put_line(b);
    

    存储过程(没有返回值)

    CREATE OR REPLACE PROCEDURE MYTEST2(A IN INTEGER DEFAULT 0, B OUT INTEGER) AS
    BEGIN
                                        --输入型可以给一个默认值
    
      B := A + 5;    
      IF A > 1 THEN
        B := A;
      
      END IF;
    
    END;
    

    调用

    DECLARE
      A INTEGER := 2;
      B INTEGER;
    
    
    
    BEGIN
    
    mytest2(a,b);
       dbms_output.put_line(b);
    END;
    

      问: 什么时候用函数,什么时候用存储过程?
            一个程序块当有一个返回值的时候用函数
            如果有多个返回值的时候用存储过程(输出型参数)  ,其实就是把一个功能封装起来,随时调用

         ------谁调用谁提交

    存储过程的一个实例运用

        在student表里面,把Mark为0 的记录删除,为1的记录价格加5 ,建立一个没有参数的存储方式,

    CREATE OR REPLACE PROCEDURE jia AS      --存储方式
    
    		CURSOR PRC IS   --用到了游标
        SELECT * FROM PRODUCT P;
    BEGIN
    
    	 FOR PP IN PRC      
         LOOP
        IF PP.MARK = 0 THEN
          DELETE  product p WHERE p.mark = pp.mark;
         
        ELSIF PP.MARK = 1 THEN
          	UPDATE product p SET p.outprice = p.outprice + 5.00 WHERE p.mark = pp.mark;
          
        END IF;
      END LOOP;
     
    END;
    
      --test window
    DECLARE
      
    BEGIN
     	jia;    --直接调用
    	commit;   
    END;
    
  • 相关阅读:
    IO 模型知多少 | 代码篇
    IO 模型知多少 | 理论篇
    ASP.NET Core 反向代理部署知多少
    ASP.NET Core 借助 Helm 部署应用至K8S
    Orleans 知多少 | 4. 有状态的Grain
    Goodbye 2019,Welcome 2020 | 沉淀 2020
    Orleans 知多少 | 3. Hello Orleans
    集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
    .NET Core 使用 K8S ConfigMap的正确姿势
    ASP.NET Core知多少(13):路由重写及重定向
  • 原文地址:https://www.cnblogs.com/zuo72/p/8051562.html
Copyright © 2020-2023  润新知