Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak wykonać procedurę lokalną za pomocą polecenia execute immedate?

Jak powiedział Amarillo, nie można dynamicznie wykonać procedury zdefiniowanej lokalnie, ponieważ nie istnieje ona w zakresie SQL, którego będzie używać sekcja dynamiczna.

Opisana sytuacja polega na tym, że wszystkie procedury są zdefiniowane w DECLARE bloku anonimowego sekcji i uruchamiasz zapytanie, które mówi ci, które z nich wykonać - i przypuszczalnie również podaje argumenty do przekazania. Możesz po prostu użyć if /else konstrukcja lub case instrukcja, aby wykonać odpowiednie procedury, na przykład:

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

Potrzebujesz tylko jednego WHEN warunek i odpowiednia procedura wzywają do każdej procedury. Możesz także mieć ELSE aby wyłapać nieoczekiwane nazwy procedur lub pozwolić CASE_NOT_FOUND wyjątek (ORA-06592), w zależności od tego, co ma się wydarzyć, jeśli tak się stanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd ACL podczas próby wysłania poczty przez Oracle UTL_SMTP

  2. Jak uzyskać liczbę rekordów za pomocą kursora odniesienia w oracle10g?

  3. zła liczba lub typy argumentów w wywołaniu P_AA

  4. Wstaw datę UTC/GMT do bazy danych Oracle za pomocą Java i Spring

  5. Czy mogę przekazać numer dla varchar2 w Oracle?