【问题标题】:Call Procedure with Ref cursor inside another procedure在另一个过程中使用 Ref 光标调用过程
【发布时间】:2016-09-03 21:32:06
【问题描述】:

我有 2 个程序,

-- Procedure 1 on another server (db link)
PROCEDURE GET_TRANSACTIONS
(
    I_FROM_DT           VARCHAR2,
    I_TO_DT             VARCHAR2,
    I_ACC_NO            number,
    I_ACC_SUB_NO        number,
    I_CURR_NO           number,
    O_DATACUR   OUT     SYS_REFCURSOR
) AS
BEGIN
  open O_DATACUR  for select * from xtable where ...(where cluase) ...;
END;



-- Procedure 2
PROCEDURE GET_TRANSACTIONS
(
    I_FROM_DT           VARCHAR2,
    I_TO_DT             VARCHAR2,
    I_ACC_NO            number,
    I_ACC_SUB_NO        number,
    I_CURR_NO           number,
    O_DATACUR   OUT     SYS_REFCURSOR
) AS
BEGIN

   XPKG.GET_TRANSACTIONS@XDBLINK_DB
    (
      I_FROM_DT, I_TO_DT, I_ACC_NO, I_ACC_SUB_NO,I_CURR_NO,  O_DATACUR
    );
END;

现在在 PHP 中,我将调用 GET_TRANSACTIONS(过程 2).. 我正在尝试从 DataRec 获取数据,但另一方面没有返回数据..如果我直接调用 GET_TRANSACTIONS (Procedure 2)...它将返回数据..

有什么解决办法吗? 请注意,我正在开发 Oracle 11g

问候

【问题讨论】:

    标签: php oracle stored-procedures plsql oracle11g


    【解决方案1】:

    您好,我尝试在不使用 DB LINK 的情况下重现相同的场景,并且我能够看到 Proc 2 返回数据。您使用 DB Link 获取数据的表的数据可能存在一些问题。希望下面的sn-p对你有帮助。

    CREATE OR REPLACE PROCEDURE GET_TRANSACTIONS(
        I_FROM_DT    VARCHAR2,
        I_TO_DT      VARCHAR2,
        I_ACC_NO     NUMBER,
        I_ACC_SUB_NO NUMBER,
        I_CURR_NO    NUMBER,
        O_DATACUR OUT SYS_REFCURSOR )
    AS
    BEGIN
      OPEN O_DATACUR FOR SELECT LEVEL FROM DUAL CONNECT BY LEVEL < 5;
    END;
    
    CREATE OR REPLACE PROCEDURE GET_TRANSACTIONS_1(
        I_FROM_DT    VARCHAR2,
        I_TO_DT      VARCHAR2,
        I_ACC_NO     NUMBER,
        I_ACC_SUB_NO NUMBER,
        I_CURR_NO    NUMBER,
        O_DATACUR OUT SYS_REFCURSOR )
    AS
    BEGIN
      GET_TRANSACTIONS ( I_FROM_DT, I_TO_DT, I_ACC_NO, I_ACC_SUB_NO,I_CURR_NO, O_DATACUR );
    END;
    
    --Check the output----------
    
    var o_cur refcursor;
    EXEC GET_TRANSACTIONS_1('1','1',1,1,1,:o_cur);
    PRINT O_CUR;
    
    
    LEVEL                                   
    --------------------------------------- 
    1                                       
    2                                       
    3                                       
    4 
    

    【讨论】:

    • 谢谢,我尝试在本地测试它我像你一样创建了 2 个本地程序.. 它工作正常.. 但问题仍然存在于 db 链接.. 意味着.. 如果我打电话给来自数据库链接的过程...它将返回空光标
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多