您的位置:首页 > 数据库 > Oracle

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

2014-10-27 16:35 1036 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐