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
%NOTFOUNDumiddelbart 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;