您的位置:首页 > Web前端

fetch cursor bulk collect 用法

2011-11-21 20:33 393 查看
oracle 在9i版本之后提供了一种批量更新方法,可以迅速的提高大数据量的批量更新。

CREATE OR Replace PROCEDURE PRO_COLLECT_TEST IS
TYPE TP_TYPE IS TABLE OF APPS.SYS_USER.USER_ID%TYPE;
TYPE TP_TYPE2 IS TABLE OF APPS.SYS_USER.USER_NAME%TYPE;
TYPE TP_TYPE3 IS TABLE OF APPS.SYS_USER.CREATE_DATE%TYPE;
VN_ID   TP_TYPE;
VS_NAME TP_TYPE2;
VD_DATE TP_TYPE3;
CURSOR P_COLLECT IS
SELECT A.USER_ID, A.USER_NAME, A.CREATE_DATE FROM APPS.SYS_USER A;

BEGIN
OPEN P_COLLECT;
LOOP
-- 收集数据
FETCH P_COLLECT BULK COLLECT
INTO VN_ID, VS_NAME, VD_DATE;

FOR I IN VN_ID.FIRST .. VN_ID.LAST LOOP
CASE VN_ID(I):
WHEN 1 THEN
UPDATE APPS.SYS_USER A
SET A.LAST_UPDATE_DATE = VD_DATE(I)
WHERE A.USER_ID = VN_ID(I);
CASE 2 THEN
UPDATE APPS.SYS_USER A
SET A.Create_By = vs_name(i)
WHERE A.USER_ID = VN_ID(I);
CASE 3 THEN
UPDATE APPS.SYS_USER A
SET A.Last_Update_By = vs_name(i)
WHERE A.USER_ID = VN_ID(I);
ELSE
NULL;
COMMIT;
END IF;
END LOOP;

EXIT WHEN P_COLLECT%NOTFOUND;
END LOOP;
CLOSE P_COLLECT;

END PRO_COLLECT_TEST;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息