Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tự động tạo và thực hiện các lệnh sql trong oracle

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:

  1. Kiểm tra %NOTFOUND ngay sau khi tìm nạp
  2. 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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. truy vấn để bỏ qua các bản ghi trùng lặp / null

  2. Chèn các bản ghi cha / con trong một giao dịch

  3. Lý do / hữu ích là gì khi sử dụng từ khóa ENABLE trong các câu lệnh cơ sở dữ liệu oracle

  4. Tìm nạp dữ liệu từ SQL Server sang SqlDataReader hoạt động như thế nào?

  5. Nhận các giá trị duy nhất không được sử dụng trên bảng SQL