使用codeigniter(oracle oci 8)检索insert ... value'return into'语句的返回值

时间:2014-04-07 18:06:54

标签: sql oracle codeigniter plsql oci8

首先,如果这是重复,我会道歉!

假设我有一个存储在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:

  1. 我把这个问题编辑得更清楚了(上面有胆量。)
  2. 我在后续语句中使用返回值作为外键。
  3. 我使用触发器和序列自动递增'PARAM1'列。

1 个答案:

答案 0 :(得分:0)

Oracle在所有名为rowid的表中都有唯一标识符。

请检查以下选择语句

select rowid, *
from ANYTABLE;

您可以通过

获取插入记录的rowid
BEGIN
  INSERT INTO TABLE_NAME(PARAM1, PARAM2, PARAM3)
  VALUES(?,?,?)
  RETURNING rowid INTO  my_output_variable_;
END;