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

Wykonaj natychmiast z typem innym niż SQL

Zależy to od tego, co rozumiesz przez „obejście” Typ będzie musiał zostać zadeklarowany na poziomie SQL, a nie w bloku PL/SQL (w tym przypadku prawdopodobnie jako pakiet). To zadziała, na przykład:

CREATE OR REPLACE TYPE t_error_msgs AS TABLE OF VARCHAR2(2000)
/

CREATE OR REPLACE PACKAGE p42 AS
  FUNCTION handler RETURN t_error_msgs;
END p42;
/

CREATE OR REPLACE PACKAGE BODY p42 AS
  FUNCTION handler RETURN t_error_msgs IS
  BEGIN
    RETURN null; -- put real data here, obviously...
  END handler;
END p42;
/

DECLARE
  v_error_msg t_error_msgs;
  v_function varchar2(30);
BEGIN
  v_function := 'p42.handler';
  EXECUTE IMMEDIATE 'BEGIN :result := ' || v_function || '; END;'
    USING OUT v_error_msg;
END;
/

Alternatywnie możesz ponownie rozważyć, czy naprawdę potrzebujesz tego, aby był dynamiczny. Przypuszczalnie przekazujesz lub w jakiś sposób określasz funkcję do wywołania w locie i wypełniasz v_function . Jeśli istnieje stosunkowo krótka lista możliwych wartości, może być łatwiej mieć case z indywidualnymi statycznymi wywołaniami funkcji.




  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 skonfiguruje domyślny NLS_LANG

  2. Przejdź z aplikacji A do aplikacji B z tymi samymi danymi uwierzytelniającymi — APEX 19,2

  3. Tworzenie maszyny wirtualnej za pomocą Oracle VM Virtual Box

  4. błąd sqlplus przy wyborze z tabeli zewnętrznej:ORA-29913:błąd podczas wykonywania objaśnienia ODCIEXTTABLEOPEN

  5. Oracle DBMS_LOB.INSTR i zawiera wydajność