sql >> Databáze >  >> RDS >> Oracle

Proveďte okamžitě s typem Non-Sql

Záleží na tom, co máte na mysli pod pojmem 'řešení' Typ bude muset být deklarován na úrovni SQL, nikoli v rámci bloku PL/SQL (v tomto případě pravděpodobně balíčku). Fungovalo by to například:

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

Případně můžete znovu zvážit, zda opravdu potřebujete, aby to bylo dynamické. Pravděpodobně předáváte nebo nějak určujete funkci, která se má volat za běhu, a vyplňujete v_function . Pokud existuje relativně krátký seznam možných hodnot, může být jednodušší mít case s jednotlivými voláními statických funkcí.




  1. MySQL InnoDB zamyká spojené řádky

  2. Je pro výkon špatné vybrat všechny sloupce?

  3. com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:Nelze zavolat vrácení zpět, když autocommit=true

  4. Stolní akordeon pomocí php a MySQL