Установить значение параметра в блоке исключений - PullRequest
0 голосов
/ 20 сентября 2019

Я использую нижеприведенную функцию в PostgreSQL перенесен из Oracle (процедура) :

CREATE OR REPLACE FUNCTION proc_get_attachments
(
    OUT op_user_data refcursor
    ,OUT op_error_code text
    ,OUT op_error_desc text
)
returns  record
LANGUAGE plpgsql
AS $$
DECLARE
 v_error_code varchar(10) := '0';
 begin
  OPEN op_user_data
   FOR
    SELECT file_complete_name, article_ref_id, file_name, file_path, content,file_extension
    FROM TBL_ATTACHMENT_MIG;
RAISE EXCEPTION 'excp_action' USING ERRCODE = '50001';

EXCEPTION
 WHEN SQLSTATE '50001' then
    op_error_code := v_error_code;
    op_error_desc := 
fn_error_detail(op_error_code,'PKG_MIGRATION_EGAIN','PROC_GET_ATTACHMENTS');
WHEN OTHERS THEN
   op_error_code := v_error_code;
   op_error_desc := fn_error_detail(op_error_code,'PKG_MIGRATION_EGAIN','PROC_GET_ATTACHMENTS');

  END;
  $$
 ;

fn_error_detail - это обычная функция, которая получает данные из глобальныхТаблица сообщений об ошибках в соответствии с кодом и другими параметрами.

При выполнении функции с помощью команды: select * from proc_get_attachments();

Получение выходных данных:

op_user_data      |op_error_code|op_error_desc                   |
------------------|-------------|--------------------------------|
<unnamed portal 1>|0            |Attachments fetched successfully|

Затем при выполнении команды: fetch all in "<unnamed portal 1>";

Error returned is : SQL Error [34000]: ERROR: cursor "" does not exist

Проблема в том, что: курсор не возвращает данные, но вывод текста отображается правильно

1 Ответ

0 голосов
/ 20 сентября 2019

Если в блоке PL / pgSQL есть исключение, все, начиная с BEGIN, открывшего блок, откатывается.

Следовательно, курсор не привязан - OPEN был отменен.

...