OracleのVARCHAR2
空の文字列をNULL
として扱います 。
だから
if tname != '' then
と同じです
if tname != NULL then
NULL
を返します TRUE
の代わりに 定義されていないので。
NULL
を確認できます tname IS NOT NULL
。
table_name
user_tables
では必須です ただし、このチェックは必要ありません。
さらに2つのこと:
-
%NOTFOUND
を確認します フェッチ直後 - 可能であれば、変数宣言に列参照を使用します(
user_tables.table_name%TYPE
)
したがって、コードは次のようになります。
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;
読みやすくするために暗黙カーソルを使用することもできます:
BEGIN
FOR cur IN ( SELECT table_name FROM user_tables ) LOOP
EXECUTE IMMEDIATE 'drop table ' || cur.table_name;
END LOOP;
END;