在PHP中使用输入参数执行Oracle游标


Execute Oracle cursor with input parameters in PHP

我很难弄清楚如何将数据作为输入添加到Oracle游标被发送到PHP中的包的存储过程。

我正试图通过游标发送2条数据。在发送之前,我已经验证了数据是正确的。

PHP代码:

$finalpieces = explode('|',$lkeyarr[$i]); //0=unique id, 1=table
$conn = oci_connect($oracleUsername,$oraclePassword,$oracleService);
$stmt = OCIParse($conn,"BEGIN PROD.PKG_CORE_OBSERVER.StuckPages_Unlock(:cur_PageDetails); END;");
$cur = oci_new_cursor($conn);
OCIBindByName($stmt,':cur_PageDetails',$cur,-1,OCI_B_CURSOR);
ociexecute($stmt,OCI_DEFAULT);

存储过程详细信息:

PROCEDURE StuckPages_Unlock
    (
      cur_PageDetails IN OUT SYS_REFCURSOR
    )

接受包含两个字段的ref游标:

 ProcessID          NUMBER(2);
 PageUniqueID       NUMBER(10);

Ref Cursor是指向结果集的指针。不能给Ref游标赋值,只能在查询中使用:

open my_ref_cursor for
    select process_id, page_unique_id
    from some_table;

所以,你的方法是错误的。很难确定你想要实现什么,但我认为你想要的是一个存储过程,它接受两个参数,用于查询表并返回ref游标。也许,像这样:

PROCEDURE StuckPages_Unlock
    (
      p_proc_id in some_table.process_id%type
      , p_page_id in some_table.page_unique_id_id%type
      , cur_PageDetails OUT SYS_REFCURSOR
    ) 
IS
    open PageDetails for
        select *
        from some_table
        where process_id = p_proc_id
        and page_unique_id = p_page_id;
END;