Lebih baik untuk menghindari menulis file spool sementara. Gunakan blok PL/SQL. Anda dapat menjalankan ini dari SQL*Plus atau memasukkannya ke dalam paket atau prosedur. Gabung ke USER_TABLES ada untuk menghindari batasan tampilan.
Sepertinya Anda tidak benar-benar ingin menonaktifkan semua batasan (termasuk NOT NULL, kunci utama, dll). Anda harus mempertimbangkan untuk menempatkan constraint_type dalam klausa WHERE.
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'ENABLED'
AND NOT (t.iot_type IS NOT NULL AND c.constraint_type = 'P')
ORDER BY c.constraint_type DESC)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
END LOOP;
END;
/
Mengaktifkan batasan lagi sedikit rumit - Anda harus mengaktifkan batasan kunci utama sebelum Anda dapat mereferensikannya dalam batasan kunci asing. Ini dapat dilakukan dengan menggunakan ORDER BY pada constraint_type. 'P' =kunci utama, 'R' =kunci asing.
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'DISABLED'
ORDER BY c.constraint_type)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" enable constraint ' || c.constraint_name);
END LOOP;
END;
/