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

时间:2016-05-09 09:46:19

标签: php oracle stored-procedures plsql oracle11g

我有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(程序2)...它将返回数据..

任何解决方案请? 注意,我正在使用Oracle 11g

此致

1 个答案:

答案 0 :(得分:0)

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

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