Symfony2 / Doctrine2 Oracle游标问题

时间:2013-08-23 08:38:46

标签: php oracle symfony doctrine-orm cursor

我们想知道是否有人可以帮助我们查询有关Symfony2 / Doctrine2的信息。

我们使用Oracle作为应用程序的数据库,我们已经开始尝试将Symfony 2和Doctrine用于新项目,以便远离Zend Framework 1 - 但是我们遇到了一个小问题。大多数数据库交互涉及调用返回游标的过程;遗憾的是,我们目前还没有在Doctrine中找到使用游标的方法,就像使用Zend DB(自定义书面语句,游标和执行类来包装标准oci8功能)一样。

有没有人成功地使用了带有Doctrine的游标,如果有的话,他们会介意发布一些指针吗?这就是我们在oci8中实现它们的方式;但是,由于没有对连接资源属性的本机访问权限,我们无法在不扩展/创建新类的情况下使用此方法来允许此操作。

为了便于阅读,省略了代码!

$oc = oci_connect($user,$pw,$tns);

$var = null;
$cur = null;

$stmt = "BEGIN schema.package.procedure(:var_in, :cur_out); END;";
$stid = oci_parse($oc, $stmt);

$cur = oci_new_cursor($oc);

oci_bind_by_name($stid, ':VAR_IN', $var);
oci_bind_by_name($stid, ': CUR_OUT', $cur, -1, OCI_B_CURSOR);

oci_execute($stid);

// Now treat the cursor as a statement resource
oci_execute($cur, OCI_DEFAULT);

oci_fetch_all($cur, $result, null, null, OCI_FETCHSTATEMENT_BY_ROW);

oci_free_statement($stid);
oci_close($oc);

//use $result for processing….
var_dump($result);

非常感谢

1 个答案:

答案 0 :(得分:-1)

我在OUT参数中找到了关于Doctrine2支持游标的零信息。

您可以从容器中获取连接资源,但不建议直接使用它。

// assuming you're in a controller
$this->get('database_connection')->getWrappedConnection();

对于Oracle连接,您可以使用ZendDB。 Symfony2有一个很好的包装器:

https://packagist.org/packages/espend/zend-db-bundle

https://github.com/Haehnchen/ZendDbBundle