[英]Set out parameter value in exception block
我在從 Oracle 遷移的 PostgreSQL 中運行下面提到的 function(過程) :
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是一個常見的 function 根據代碼和其他參數從全局錯誤消息表中獲取數據。
在使用命令執行 function 時: select * from proc_get_attachments();
獲取 Output:
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
問題是: cursor 沒有返回數據,但文本 output 正確顯示
如果 PL/pgSQL 塊中存在異常,則從打開該塊的BEGIN
開始的所有內容都會回滾。
因此 cursor 未綁定 - OPEN
已撤消。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.