Oracle's VARCHAR2
behandelt lege strings als NULL
.
Dus
if tname != '' then
is hetzelfde als
if tname != NULL then
die NULL
teruggeeft in plaats van TRUE
omdat het niet gedefinieerd is.
U kunt controleren op NULL
door tname IS NOT NULL
.
table_name
is verplicht in user_tables
deze controle is echter niet nodig.
Nog twee dingen:
- Controleer op
%NOTFOUND
onmiddellijk na het ophalen - Gebruik indien mogelijk kolomverwijzingen voor variabele declaraties (
user_tables.table_name%TYPE
)
Dus je code zou er zo uit kunnen zien:
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;
U kunt ook een impliciete cursor gebruiken voor een betere leesbaarheid:
BEGIN
FOR cur IN ( SELECT table_name FROM user_tables ) LOOP
EXECUTE IMMEDIATE 'drop table ' || cur.table_name;
END LOOP;
END;