sql >> Databasteknik >  >> RDS >> Oracle

Kör omedelbart med icke-Sql-typ

Det beror på vad du menar med 'lösning'. Typen måste deklareras på SQL-nivå, inte inom ett PL/SQL-block (förmodligen ett paket i detta fall). Detta skulle fungera, till exempel:

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 ompröva om du verkligen behöver detta för att vara dynamiskt. Förmodligen passerar du eller bestämmer på något sätt vilken funktion som ska anropas i farten och fyller i v_function . Om det finns en relativt kort lista över möjliga värden kan det vara enklare att ha ett case med individuella statiska funktionsanrop.




  1. Fjäderanslutningsproblem

  2. Introduktion av vanliga tabelluttryck i SQL Server

  3. MySql ger behörigheter för alla databaser som börjar med <sträng>

  4. Ställa in ODBC-anslutningsattribut utan att behöva skriva kod