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
%NOTFOUND
ngay 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;