这是关于之前的存储过程小练习的优化版本

CREATE OR REPLACE PROCEDURE PRO_ASDF(I_GZ IN NUMBER,O_ONTE OUT NUMBER,O_SQL OUT VARCHAR2)--有入参,出参
AS
V_GZ NUMBER(30):=I_GZ;--初始化变量
V_SQL VARCHAR2(200);

BEGIN
/* O_NO NUMBER(10):=1;*/
O_ONTE :=1;--提示
O_SQL:='ok';--提示
FOR XX IN (SELECT * FROM SCOTT.EMP) LOOP
IF XX.SAL<=V_GZ THEN
UPDATE ASDF T SET T.SAL=T.SAL+500 WHERE T.EMPNO=XX.EMPNO;--where避免笛卡尔积
ELSE
UPDATE ASDF T SET T.SAL=T.SAL+1000 WHERE T.EMPNO=XX.EMPNO;
END IF;
END LOOP;
COMMIT;
V_SQL:='SELECT * FROM ASDF T WHERE T.GZ='||V_GZ||'ASDF';--这里是引号的作用
DBMS_OUTPUT.PUT_LINE(V_SQL);

EXCEPTION WHEN OTHERS THEN --异常处理
ROLLBACK;
O_ONTE :=-1;
O_SQL:=SQLERRM;--异常信息
END PRO_ASDF;

下面是截图:

主要优化:

1.减少了一些错误的发生,比如少了end if,逗号啊,冒号啊等等。

2.增加了入参出参。

3.增加了提示信息。

4.增加了异常处理。

5.增加了引号的作用。V_SQL:='XXXXXXXXXXXXX'

6.菜鸟成长中。。。。

原文地址:https://www.cnblogs.com/zzzhw/p/9951975.html