Oracle带输入、输出参数的存储过程 返回受影响的行数 SQL%ROWCOUNT

CREATE OR REPLACE PROCEDURE PROC_UPDATE_TEMP(P_DAYS       IN NUMBER, --执行天数
                                             P_ROWS       OUT VARCHAR2, --返回受影响的行数
                                             P_IS_SUCCESS OUT BOOLEAN) --返回成功与否
 AS
  V_NOW        DATE := TRUNC(SYSDATE);
  V_BEGIN_DATE DATE;
  V_SECOND     NUMBER;
  I            INT := 0;

BEGIN

  /*  WHILE I < P_DAYS LOOP
    UPDATE T_TEMP
       SET TEMP_STATUS = '01', TEMP_FLAG = '0'
     WHERE CREATE_TIME >= V_NOW - I
       AND CREATE_TIME < V_NOW + 1 - I;
    COMMIT;
    I = I + 1;
  END LOOP;*/

  FOR I IN 0 .. P_DAYS LOOP
    BEGIN
      V_BEGIN_DATE := SYSDATE;
      UPDATE T_TEMP
         SET TEMP_STATUS = '01', TEMP_FLAG = '0'
       WHERE CREATE_TIME >= V_NOW - I
         AND CREATE_TIME < V_NOW + 1 - I;
      P_IS_SUCCESS := TRUE;
      V_SECOND     := (SYSDATE - V_BEGIN_DATE) * 24 * 60 * 60;
      --返回受影响的行数:SQL%ROWCOUNT
      P_ROWS := SQL%ROWCOUNT || '行被更新,耗时:' || TRUNC(V_SECOND, 2) || '秒';
      DBMS_OUTPUT.PUT_LINE(P_ROWS);
    
      COMMIT;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        NULL;
        P_IS_SUCCESS := FALSE;
    END;
  END LOOP;
END PROC_UPDATE_TEMP;

--调用存储过程
DECLARE
  -- Boolean parameters are translated from/to integers: 
  -- 0/1/null <--> false/true/null 
  P_IS_SUCCESS BOOLEAN;
  P_ROWS       VARCHAR2(200);
BEGIN
  -- Call the procedure
  PKG_STL_UPDATE_BILL_DATA.PROC_STL_UPDATE_TRUNC(P_DAYS       => 0,
                                                 P_ROWS       => P_ROWS,
                                                 P_IS_SUCCESS => P_IS_SUCCESS);
  -- Convert false/true/null to 0/1/null 
  --:P_IS_SUCCESS := SYS.DIUTIL.BOOL_TO_INT(P_IS_SUCCESS);
  dbms_output.put_line(P_ROWS);
  dbms_output.put_line(SYS.DIUTIL.BOOL_TO_INT(P_IS_SUCCESS));
END;

--SQL%ROWCOUNT用法
BEGIN
  UPDATE T_JOB T SET T.JOB_ID = NULL WHERE T.ID = '2013';

  IF (SQL%ROWCOUNT != 1) THEN
    RAISE_APPLICATION_ERROR(-20001, '没有成功修改到记录');
  END IF;
END;

RAISE_APPLICATION_ERROR的用法可参考http://blog.csdn.net/a416090287/article/details/8699940


转载自:http://blog.csdn.net/rosanu_blog/article/details/8698739

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值