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.菜鸟成长中。。。。