Oracleでは、循環文の使用を最小限に抑える
-- Start
次は、ループ文を使用してテーブルレコードを削除する例です.
あなたの仕事の中で、決して上の文を書かないでください.そうしないと、ためらうことなく自分に耳を傾けなければなりません.バッチを使うべきです.以下のようにします.
または、次のようにTABLE式を使用します.
--詳細は、「Oracle SQL最適化」を参照してください.
--声明:転載は出典を明記してください
-- Last edited on 2015-06-30
-- Created by ShangBo on 2015-06-30
-- End
次は、ループ文を使用してテーブルレコードを削除する例です.
DECLARE
TYPE NumList IS TABLE OF NUMBER;
emps NumList := NumList(10, 30, 70);
BEGIN
FOR i IN emps.FIRST..emps.LAST LOOP
DELETE FROM employees WHERE employee_id = emps(i);
END LOOP;
END;
あなたの仕事の中で、決して上の文を書かないでください.そうしないと、ためらうことなく自分に耳を傾けなければなりません.バッチを使うべきです.以下のようにします.
DECLARE
TYPE NumList IS TABLE OF NUMBER;
emps NumList := NumList(10, 30, 70);
BEGIN
-- FORALL
FORALL i IN emps.FIRST..emps.LAST
DELETE FROM employees WHERE employee_id = emps(i);
END;
または、次のようにTABLE式を使用します.
CREATE OR REPLACE TYPE number_table AS TABLE OF NUMBER;
DECLARE
emps number_table := number_table(10, 30, 70);
BEGIN
DELETE FROM employees WHERE employee_id IN (SELECT COLUMN_VALUE FROM TABLE(emps));
END;
--詳細は、「Oracle SQL最適化」を参照してください.
--声明:転載は出典を明記してください
-- Last edited on 2015-06-30
-- Created by ShangBo on 2015-06-30
-- End