Oracle
 sql >> база данни >  >> RDS >> Oracle

Незабавно изпълнение с тип, различен от Sql

Зависи какво имате предвид под „заобиколно решение“. Типът ще трябва да бъде деклариран на ниво SQL, а не в рамките на PL/SQL блок (вероятно пакет в този случай). Това ще работи, например:

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

Като алтернатива можете да преосмислите дали наистина имате нужда това да бъде динамично. Вероятно предавате или по някакъв начин определяте функцията за извикване в движение и попълвате v_function . Ако има сравнително кратък списък от възможни стойности, може да е по-лесно да имате case с отделни извиквания на статични функции.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изглед за прецизиране на връзките за SQL разработчици

  2. Свържете Sys като Sysdba:Недостатъчни привилегии

  3. Използване на въртене върху множество колони от ред на Oracle

  4. Изчисляване на възрастта от рожден ден със задействане на oracle plsql и вмъкване на възрастта в таблицата

  5. Добавете или прикачете json обект в друг json обект json обект с plsql