Я использую нижеприведенную функцию в 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
Проблема в том, что: курсор не возвращает данные, но вывод текста отображается правильно