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

Bagaimana cara menjalankan prosedur lokal menggunakan eksekusi segera?

Seperti yang dikatakan Amarillo, Anda tidak dapat menjalankan prosedur yang ditentukan secara lokal secara dinamis, karena tidak ada dalam lingkup SQL yang akan digunakan bagian dinamis.

Situasi yang Anda gambarkan adalah bahwa semua prosedur didefinisikan dalam blok anonim DECLARE bagian dan Anda menjalankan kueri yang memberi tahu Anda mana yang harus dieksekusi - dan mungkin yang juga memberi Anda argumen untuk diteruskan. Anda cukup menggunakan if /else konstruksi atau case pernyataan untuk menjalankan prosedur yang sesuai, seperti:

DECLARE
  ...
BEGIN
  FOR data IN (SELECT procname, arg1, arg2, ... from <your_query>) LOOP
    CASE data.procname
      WHEN 'OPENLOG' THEN
        openlog(data.arg1);
      WHEN 'WRITELOG' THEN
        writelog(data.arg1, data.arg2);
      WHEN ...
        ...
      ELSE
         -- handle/report an invalid procedure name
         -- or skip the `ELSE` and let CASE_NOT_FOUND be thrown
    END CASE;
  END LOOP;
END;
/

Anda hanya perlu satu WHEN kondisi dan panggilan prosedur yang tepat untuk setiap prosedur. Anda juga dapat memiliki ELSE untuk menangkap nama prosedur yang tidak terduga atau membiarkan CASE_NOT_FOUND pengecualian (ORA-06592) dilempar, tergantung pada apa yang Anda butuhkan untuk terjadi jika itu terjadi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengatur properti koneksi (termasuk Sinonim)

  2. Bagaimana saya bisa terhubung ke database Oracle sebagai sysdba menggunakan bltoolkit?

  3. menambahkan bulan ke tanggal SQL

  4. Mengambil array pl/sql (sebagai parameter keluar)

  5. hubungan satu-ke-banyak dengan batasan basis data dan invers=true