在异常块中设置参数值



我在从Oracle(过程(迁移的PostgreSQL中运行以下提到的函数:

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

返回的错误是: SQL 错误 [34000]: 错误: 游标 " 不存在

问题是:光标未返回数据,但文本输出正确显示

如果 PL/pgSQL 块中存在异常,则自打开该块的BEGIN以来的所有内容都将回滚。

因此,游标未绑定 —OPEN已撤消。

相关内容

  • 没有找到相关文章

最新更新