簡體   English   中英

在異常塊中設置參數值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM