VARCHAR2 của Oracle coi các chuỗi trống là NULL .
Vì vậy,
if tname != '' then
giống như
if tname != NULL then
sẽ trả về NULL thay vì TRUE vì nó không được xác định.
Bạn có thể kiểm tra NULL bởi tname IS NOT NULL .
table_name là bắt buộc trong user_tables tuy nhiên, vì vậy không cần kiểm tra này.
Hai điều nữa:
- Kiểm tra
%NOTFOUNDngay sau khi tìm nạp - Sử dụng tham chiếu cột cho khai báo biến nếu có thể (
user_tables.table_name%TYPE)
Vì vậy, mã của bạn có thể trông như thế:
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;
Bạn cũng có thể sử dụng một con trỏ ngầm để dễ đọc hơn:
BEGIN
FOR cur IN ( SELECT table_name FROM user_tables ) LOOP
EXECUTE IMMEDIATE 'drop table ' || cur.table_name;
END LOOP;
END;