Oracle Database tidak menyertakan IF NOT EXISTS
klausa dengan CREATE TABLE
pernyataan, seperti yang dilakukan beberapa DBMS lainnya.
Oleh karena itu, jika kita tidak ingin membuat kesalahan karena nama tabel sudah digunakan, kita perlu menggunakan metode lain untuk memeriksa keberadaan tabel.
Opsi 1:Periksa DBA_TABLES
Lihat
DBA_TABLES
adalah tampilan kamus data yang menjelaskan semua tabel relasional dalam database. Kolomnya sama dengan yang ada di ALL_TABLES
.
Kita bisa mengecek tabel ini untuk melihat apakah tabel sudah ada, kemudian jalankan saja CREATE TABLE
pernyataan jika belum ada.
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:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
Hasil:
PL/SQL procedure successfully completed.
Dalam hal ini, tabel dibuat karena tidak ada tabel yang memiliki nama t1
.
Sekarang, jika kita mencoba membuat tabel lagi, kita akan mendapatkan output yang sama dengan prosedur PL/SQL yang berhasil diselesaikan, dan tidak akan ada kesalahan.
Namun, jika kita hanya mencoba membuat tabel tanpa terlebih dahulu memeriksa keberadaannya, kita akan mendapatkan error:
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
);
Hasil:
Error report - ORA-00955: name is already used by an existing object 00955. 00000 - "name is already used by an existing object"
Opsi 2:Uji Kesalahan
Cara lain untuk melakukannya adalah dengan menjalankan CREATE TABLE
pernyataan, dan kemudian menangkap kesalahan ORA-00955 yang terjadi. Secara khusus, kami menangkap kesalahan SQLCODE -955 yang terjadi.
Contoh:
DECLARE
sql_stmt long;
BEGIN
sql_stmt:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -955 THEN
NULL;
ELSE
RAISE;
END IF;
END;
Hasil:
PL/SQL procedure successfully completed.
Saya menjalankannya meskipun T1
tabel sudah ada. Kesalahan ORA-00955 ditangkap dan ditangani sehingga kami tidak mendapatkan pesan kesalahan, dan tabel tidak dibuat.
Jika tabel belum ada, tabel akan dibuat, dan kita akan melihat output yang sama.