以下にあるFORALL文に挿入された行の数を取得して出力する最良の方法は何ですか?私はSQL%BULK_ROWCOUNTを見たことがありますが、以下のステートメントではどのように動作するのか分かりません。Oracle PL/SQL FORALL文に挿入された挿入数はどのように出力されますか
それは
DBMS_OUTPUT.('rows inserted '||SQL%BULK_ROWCOUNT||'');
では、別のFORALL文で行くには上記の必要性をしていますか?以下のコードについては、これをどうすれば達成できますか?
DECLARE
TYPE t_arc_act_plus_trigger1 IS TABLE OF arc_act_plus_triggers1%ROWTYPE;
v_arc_act_plus_triggers1 t_arc_act_plus_trigger1;
CURSOR c_arc_act_plus_triggers1 IS
SELECT /*+ PARALLEL */ apt.*
FROM act_plus_triggers1 apt
WHERE NOT EXISTS
(SELECT 1
FROM act_plus_triggers_copy1 aptc
WHERE aptc.surr_id = apt.surr_id)
AND apt.status IN ('EXT', 'EXP');
BEGIN
OPEN c_arc_act_plus_triggers1;
LOOP
FETCH c_arc_act_plus_triggers1 BULK COLLECT INTO v_arc_act_plus_triggers1 LIMIT 10000; -- limit to 10k to avoid out of memory
FORALL i IN 1..v_arc_act_plus_triggers1.COUNT
INSERT /*+ APPEND_VALUES */ INTO arc_act_plus_triggers1 values v_arc_act_plus_triggers1(i);
Com0932.get_parameter ('ACT_ARCHIVE_TRIGGER_STOP_YN',l_STOP_PROGRAM_YN);
IF l_STOP_PROGRAM_YN = 'Y' THEN
p_location('insert_into_arc_act_plus - STOP_PROGRAM_YN flag = '||l_STOP_PROGRAM_YN||' so ROLLBACK');
ROLLBACK;
EXIT;
END IF;
-- **************************************************
-- Output how many records have been inserted here???
-- **************************************************
-- commit after every 10000 records into arc_act_plus_triggers1
COMMIT;
EXIT WHEN c_arc_act_plus_triggers1%NOTFOUND;
END LOOP;
CLOSE c_arc_act_plus_triggers1;
END;
「SQL%ROWCOUNT」を試しましたか? https://docs.oracle.com/database/121/LNPLS/static.htm#LNPLS99956 –
おそらく、それは 'v_arc_act_plus_triggers1.COUNT'でしょうか?例外が発生しないと仮定した場合など – Boneist
ある表からコピー表であるアーカイブ表へのまっすぐなコピーであるため、例外は発生しません。 –