在另一个过程中使用Ref游标调用过程


Call Procedure with Ref cursor inside another procedure

我有两个程序,

-- 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(过程2)。。。它将返回数据。。

有什么解决方案吗?注意,我正在开发Oracle 11g

问候

你好,我试图在不使用DB LINK的情况下重新生成相同的场景,并且我能够看到Proc 2返回数据。使用DBLink获取数据的表中的数据可能存在一些问题。希望下面的片段能帮助你。

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