zoukankan      html  css  js  c++  java
  • 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;
    
  • 相关阅读:
    git如何忽略文件或者文件夹
    jsonp跨域请求发布出去
    PHP
    curl保存图片
    curl 请求
    输入框纯数字
    PHP允许AJAX跨域请求的两种方法
    IOS开发笔记 IOS如何访问通讯录
    Android 蓝牙开发(整理大全)
    新的移动服务示例
  • 原文地址:https://www.cnblogs.com/zuo72/p/8051562.html
Copyright © 2011-2022 走看看