VARCHAR2
Oracle memperlakukan string kosong sebagai NULL
.
Jadi
if tname != '' then
sama dengan
if tname != NULL then
yang akan mengembalikan NULL
bukannya TRUE
karena tidak didefinisikan.
Anda dapat memeriksa NULL
oleh tname IS NOT NULL
.
table_name
wajib di user_tables
meskipun, jadi tidak perlu pemeriksaan ini.
Dua hal lagi:
- Periksa
%NOTFOUND
segera setelah mengambil - Gunakan referensi kolom untuk deklarasi variabel jika memungkinkan (
user_tables.table_name%TYPE
)
Jadi kode Anda bisa terlihat seperti itu:
DECLARE
tname user_tables.table_name%TYPE;
CURSOR ctable IS SELECT table_name FROM user_tables;
BEGIN
OPEN ctable;
LOOP
FETCH ctable INTO tname;
EXIT WHEN ctable%NOTFOUND;
EXECUTE IMMEDIATE 'drop table ' || tname;
END LOOP;
CLOSE ctable;
END;
Anda juga dapat menggunakan kursor implisit untuk keterbacaan yang lebih baik:
BEGIN
FOR cur IN ( SELECT table_name FROM user_tables ) LOOP
EXECUTE IMMEDIATE 'drop table ' || cur.table_name;
END LOOP;
END;