【问题标题】:Call an Oracle store a procedure which doesn't return values using Doctrine2使用 Doctrine2 调用 Oracle 存储一个不返回值的过程
【发布时间】:2014-03-28 21:27:49
【问题描述】:

我需要调用一个不返回任何数据的存储过程,所以我不需要任何类型的水合。

当我尝试这样做时

 $rsm = new \Doctrine\ORM\Query\ResultSetMapping();            
 $query = $this->getDoctrine()->getManager()->createNativeQuery(
      "CALL SP_CARGA_LIQ(...)", $rsm );
 $query->getResult();

发生异常并显示以下消息:

警告:oci_fetch_array():ORA-24374:在/var/www/LiquidacionesWeb/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php 行中获取或执行和获取之前定义未完成217

有人知道怎么解决吗?

【问题讨论】:

    标签: oracle symfony doctrine-orm


    【解决方案1】:

    在我的情况下,BEGIN END 块的结束通话有所帮助。含义:

    $query = $this->getDoctrine()->getManager()->createNativeQuery(
          "BEGIN SP_CARGA_LIQ(...); END;", $rsm );
    

    这似乎是 Oracle 的错误,而不是 Doctrine 的错误

    编辑: 你可以用更原生的方式来做:

     $this->getDoctrine()->getConnection()->exec("BEGIN SP_CARGA_LIQ(...); END;");
    

    【讨论】:

    • 我已经尝试了你的建议,但它抛出了完全相同的异常。
    • 有没有办法给那个函数设置参数?
    • 我用过 $this->getDoctrine()->getConnection()->executeQuery( /*查询*/, array( /*parameters*/ ) );它在内部调用您评论的函数。谢谢。
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多