Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Membuat dan menjalankan perintah sql secara dinamis di oracle

VARCHAR2 Oracle memperlakukan string kosong sebagai NULL .
Jadi

if tname != '' then

sama dengan

if tname != NULL then

yang akan mengembalikan NULL bukannya TRUE karena tidak didefinisikan.

Anda dapat memeriksa NULL oleh tname IS NOT NULL .

table_name wajib di user_tables meskipun, jadi tidak perlu pemeriksaan ini.

Dua hal lagi:

  1. Periksa %NOTFOUND segera setelah mengambil
  2. Gunakan referensi kolom untuk deklarasi variabel jika memungkinkan ( user_tables.table_name%TYPE )

Jadi kode Anda bisa terlihat seperti itu:

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;

Anda juga dapat menggunakan kursor implisit untuk keterbacaan yang lebih baik:

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. Oracle - Mengonversi SDO_GEOMETRY ke WKT?

  2. ORACLE Sisipkan kinerja pada tabel yang diindeks

  3. SQL misterius memblokir prosedur tersimpan saya agar tidak dieksekusi di ORACLE

  4. Mengkonversi dari tanggal ke zaman-Oracle

  5. Tablespace di Oracle