sql >> Database teknologi >  >> RDS >> Oracle

Udfør øjeblikkelig med ikke-Sql-type

Det afhænger af, hvad du mener med 'løsning'. Typen skal erklæres på SQL-niveau, ikke inden for en PL/SQL-blok (formodentlig en pakke i dette tilfælde). Dette ville fungere, for eksempel:

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

Alternativt kan du genoverveje, om du virkelig har brug for, at dette er dynamisk. Formodentlig er du ved at bestå eller på en eller anden måde bestemmer funktionen til at ringe i farten og udfylder v_function . Hvis der er en relativt kort liste over mulige værdier, kan det være nemmere at have en case med individuelle statiske funktionskald.




  1. Lagring af redundante fremmednøgler for at undgå joins

  2. MySQL InnoDB:Forskellen mellem "TIL OPDATERING" og "LÅS I DELINGSMODUS"

  3. PDO returnerer heltalskolonner som String i PHP5.4

  4. SQL Server Process Queue Race Condition