sql >> Database >  >> RDS >> Oracle

Direct uitvoeren met niet-Sql-type

Het hangt ervan af wat je met 'workaround' bedoelt. Het type zal op SQL-niveau gedeclareerd moeten worden, niet binnen een PL/SQL-blok (in dit geval vermoedelijk een pakket). Dit zou bijvoorbeeld werken:

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

Als alternatief kun je heroverwegen of je dit echt nodig hebt om dynamisch te zijn. Vermoedelijk passeert of bepaalt u op de een of andere manier de functie die u onmiddellijk moet aanroepen en vult u v_function in . Als er een relatief korte lijst met mogelijke waarden is, is het misschien eenvoudiger om een ​​case . te hebben met individuele statische functie-aanroepen.




  1. INSERT van 10 miljoen queries binnen 10 minuten in Oracle?

  2. Fout in MySQL-query (fout in uw SQL-syntaxis)

  3. Rails Resque-werknemers mislukken met PGError:server heeft de verbinding onverwacht gesloten

  4. Prestaties van MySQL Insert-statements in Java:Batch-modus voorbereide statements versus enkelvoudig invoegen met meerdere waarden