我很难弄清楚如何将数据作为输入添加到发送到PHP的包的存储过程的Oracle游标中。
我正在尝试通过游标发送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
)
接受包含2个字段的引用游标:
ProcessID NUMBER(2);
PageUniqueID NUMBER(10);
非常感谢任何帮助。
答案 0 :(得分:1)
Ref Cursor是结果集的指针。我们无法为Ref Cursor赋值,我们将它与查询一起使用:
open my_ref_cursor for
select process_id, page_unique_id
from some_table;
所以,你的做法是错误的。很难确定你想要实现什么,但我认为你想要的是一个存储过程,它接受两个参数,用于查询表并返回引用游标。也许,这样的事情:
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;