Oracle Database tidak menyertakan IF EXISTS
klausa yang ditawarkan beberapa DBMS lain di DROP TABLE
pernyataan. Oleh karena itu, jika kita ingin menghindari kesalahan buruk yang diakibatkan dari mencoba menjatuhkan tabel yang tidak ada, kita perlu melakukan sedikit kerja ekstra.
Opsi 1:Periksa apakah Tabel Ada
Kita dapat memeriksa DBA_TABLES
tampilan kamus data untuk melihat apakah tabel ada. Tampilan ini menjelaskan semua tabel relasional dalam database. Kolomnya sama dengan yang ada di ALL_TABLES
.
Kita dapat memeriksa tabel ini untuk melihat apakah tabel tersebut ada, kemudian jalankan DROP TABLE
pernyataan jika ya.
Contoh:
DECLARE
tbl_count number;
sql_stmt long;
BEGIN
SELECT COUNT(*) INTO tbl_count
FROM dba_tables
WHERE owner = 'HR'
AND table_name = 'T1';
IF(tbl_count <> 0)
THEN
sql_stmt:='DROP TABLE T1';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
Hasil:
PL/SQL procedure successfully completed.
Dalam hal ini, tabel yang disebut t1
sudah ada dan dihapus.
Sekarang, jika kita menjalankan kode yang sama lagi, kita mendapatkan output yang sama:
PL/SQL procedure successfully completed.
Tidak ada kesalahan yang terjadi, meskipun tabel tidak ada lagi.
Namun, jika kita hanya mencoba untuk menjatuhkan tabel tanpa terlebih dahulu memeriksa keberadaannya, kita akan mendapatkan kesalahan:
DROP TABLE T1;
Hasil:
Error report - ORA-00942: table or view does not exist 00942. 00000 - "table or view does not exist"
Opsi 2:Uji Kesalahan
Cara lain untuk melakukannya adalah dengan menjalankan DROP TABLE
pernyataan, dan kemudian menangkap kesalahan ORA-00942 yang terjadi. Secara khusus, kami menangkap kesalahan SQLCODE -942 yang terjadi.
Contoh:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
Hasil:
PL/SQL procedure successfully completed.
Saya menjalankannya meskipun T1
tabel tidak ada. Kesalahan ORA-00942 ditangkap dan ditangani sehingga kami tidak mendapatkan pesan kesalahan.
Jika tabel sudah ada, tabel akan dihapus, dan kita akan melihat output yang sama.