首先,如果这是重复,我会道歉!
假设我有一个存储在PHP变量$sql
中的PL / SQL匿名块,准备执行并按此布局:
BEGIN
INSERT INTO TABLE_NAME(PARAM1, PARAM2, PARAM3)
VALUES(?,?,?)
RETURNING TABLE_NAME.PARAM1 INTO ?;
END;
使用Codeigniter框架,我希望能够执行此语句:
$query = $this->db->query($sql, array('1', 'Hello', 'World', $id));
...然后能够访问返回的变量'1',该变量应存储在$id
变量中。
我知道我提供的语法不一定有用,我只是用它来演示我想要实现的目标。
我不相信OCI8驱动程序能够以这种方式处理来自语句的返回变量。我似乎无法找到一种方法将变量(在本例中为$id
)手动绑定到PL / SQL语句的RETURN ... INTO子句。通常我可以这样做:
oci_bind_by_name($stid, ':id', $id) //replace '?' with ':id' on the RETURN...INTO section of the anonymous block
...但是,我尝试使用$this->db->call_function()
来实现这一点,但这也无效。我一直在挖掘代码,试图找到一种方法来扩展驱动程序来做到这一点,但我担心我可能会使事情变得复杂,或者我会以错误的方式解决问题。
编辑问题8/4/14:
我知道如何选择我想要返回的列变量。我不确定的是如何将返回的变量绑定到codeigniter框架内的PHP变量。
提前超级谢谢! :)
编辑1:
答案 0 :(得分:0)
Oracle在所有名为rowid的表中都有唯一标识符。
请检查以下选择语句
select rowid, *
from ANYTABLE;
您可以通过
获取插入记录的rowidBEGIN
INSERT INTO TABLE_NAME(PARAM1, PARAM2, PARAM3)
VALUES(?,?,?)
RETURNING rowid INTO my_output_variable_;
END;