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;
原文地址:https://www.cnblogs.com/zuo72/p/8051562.html