Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да изпълним локална процедура с помощта на execute immedate?

Както каза Амарило, не можете да изпълните локално дефинирана процедура динамично, тъй като тя не съществува в обхвата на SQL, който ще използва динамичната секция.

Ситуацията, която описвате, е, че всички процедури са дефинирани в DECLARE на анонимния блок раздел и изпълнявате заявка, която ви казва кой от тях да изпълните - и вероятно също така ви дава аргументите за предаване. Можете просто да използвате if /else конструкция или case израз за изпълнение на подходящите процедури, нещо като:

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;
/

Трябва ви само едно WHEN състояние и обаждане за подходяща процедура за всяка процедура. Можете също да имате ELSE за улавяне на неочаквани имена на процедури или оставяне на CASE_NOT_FOUND изключение (ORA-06592) бъде хвърлено в зависимост от това какво трябва да се случи, ако това някога се случи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализирайте резултатите от оператор SELECT

  2. Споделяне на връзка с база данни на Oracle между едновременни задачи на Celery

  3. Декларирайте динамичен масив в Oracle PL/SQL

  4. pl/sql - Използване на динамична заявка в съхранена процедура

  5. Как да добавя едно към низ в oracle