Oracles VARCHAR2
behandler tomme strenge som NULL
.
Så
if tname != '' then
er det samme som
if tname != NULL then
hvilket vil returnere NULL
i stedet for TRUE
da det ikke er defineret.
Du kan tjekke for NULL
af tname IS NOT NULL
.
table_name
er obligatorisk i user_tables
dog, så der er ikke behov for denne kontrol.
To ting mere:
- Se efter
%NOTFOUND
umiddelbart efter hentning - Brug kolonnereferencer til variable erklæringer, hvis det er muligt (
user_tables.table_name%TYPE
)
Så din kode kunne se sådan ud:
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;
Du kan også bruge en implicit markør for bedre læsbarhed:
BEGIN
FOR cur IN ( SELECT table_name FROM user_tables ) LOOP
EXECUTE IMMEDIATE 'drop table ' || cur.table_name;
END LOOP;
END;