【问题标题】:Execute dbms_mview.refresh from CodeIgniter从 CodeIgniter 执行 dbms_mview.refresh
【发布时间】:2011-10-28 21:44:49
【问题描述】:

我需要执行EXECUTE dbms_mview.refresh('MATERIALIZED_VIEW_NAME') 从模型中调用这个包,但是当我尝试使用类似这样的语句时:

$refresh = $this->db->query('EXECUTE DBMS_MVIEW.REFRESH(\'CRM_LISTADO_CONTACTOS\')');

但是我从模型中的这一行收到一个数据库错误。我也试过db->store_procedure,但也没有用。

知道如何调用包吗? 非常感谢!

【问题讨论】:

  • 不显示任何错误只是错误。然后,如果我在 Oracle 开发人员中输入它并且它可以工作。

标签: oracle packages


【解决方案1】:

好吧,我以前从未听说过 CodeIgniter,但我有根据的猜测是您正在使用 $this->$db->query 而您没有向它传递查询?

我的猜测是,如果它完全支持调用存储过程,也许有 $this->$db->call_function 或 $this->$db->call_procedure 之类的?

抱歉,这确实是 Codeigniter 问题,而不是 Oracle 问题。

【讨论】:

  • 是的,它是一个 CI 的东西。我还尝试如下使用 oci_execute 强制它,但它仍然给出 ORA-00900: invalid SQL statement: $conn = oci_connect(usr, pass, host); $query = 'EXEC dbms_mview.refresh(\'MAT_VIEw_NAME\')'; $stid = oci_parse($conn, $query); $r = oci_execute($stid, OCI_DEFAULT);
【解决方案2】:

嗯,看来我终于设法解决了这个问题。我正在发布我的解决方案,也许它可以帮助其他人。

在解析传递给过程的参数时,看起来 CI 崩溃了,所以我不得不返回源代码并使用基本的 oci_execute 方法。我的解决方案如下所示:

在模型中:

...执行 INSERTS 和 UPDATES 的代码...然后...

    $p_name_mat_view = 'VIEW_NAME';
    $p_refresh_method = NULL;

    $conn = oci_connect('username', 'password', 'hostname');
    $query = 'BEGIN dbms_mview.refresh(:p_name_mat_view, :p_refresh_method); END;';

    $stid = oci_parse($conn, $query);

    oci_bind_by_name($stid, ":p_name_mat_view", & $p_name_mat_view);
    oci_bind_by_name($stid, ":p_refresh_method", & $p_refresh_method);
    $r = oci_execute($stid);

它成功了!

干杯, 维罗

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 2016-09-02
    • 2019-03-03
    • 2015-12-24
    • 2010-10-24
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多