Oracle 从CodeIgniter执行dbms_mview.refresh
我需要执行Oracle 从CodeIgniter执行dbms_mview.refresh,oracle,packages,Oracle,Packages,我需要执行executedbms\u mview.refresh('MATERIALIZED\u VIEW\u NAME')从模型中调用此包,但当我尝试使用这样的语句执行此操作时: $refresh = $this->db->query('EXECUTE DBMS_MVIEW.REFRESH(\'CRM_LISTADO_CONTACTOS\')'); 但是我从模型中的这一行收到一个数据库错误。我也尝试了db->store\u过程,但也没有成功 你知道怎么叫包裹吗? 非常感谢 嗯,我
executedbms\u mview.refresh('MATERIALIZED\u VIEW\u NAME')
从模型中调用此包,但当我尝试使用这样的语句执行此操作时:
$refresh = $this->db->query('EXECUTE DBMS_MVIEW.REFRESH(\'CRM_LISTADO_CONTACTOS\')');
但是我从模型中的这一行收到一个数据库错误。我也尝试了db->store\u过程
,但也没有成功
你知道怎么叫包裹吗?
非常感谢 嗯,我以前从未听说过CodeIgniter,但我有根据地猜测,您使用的是$this->$db->query,而不是传递查询 我的猜测是,如果它支持调用存储过程,可能有$this->$db->call\u函数或者$this->$db->call\u过程,或者其他什么
抱歉,这确实是一个Codeigniter问题,而不是Oracle问题。看来我终于解决了这个问题。我正在发布我的解决方案,也许它可以帮助其他人 在解析传递给过程的参数时,似乎CI崩溃了,因此,我不得不返回源代码并使用基本的oci_execute方法。我的解决方案如下所示: 在模型中: …执行插入和更新的代码…然后
$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);
成功了
干杯,
Vero不显示任何错误,只显示错误。然后,如果我在Oracle开发者中输入它,它就可以工作了。是的,它是一个CI的东西。我还尝试按如下方式使用oci_execute强制它,但它仍然给出一个ORA-00900:invalid SQL语句:$conn=oci_connect(usr,pass,host)$query='EXEC dbms\u mview.refresh(\'MAT\u VIEw\u NAME\');$stid=oci_parse($conn$query);$r=oci_执行($stid,oci_默认值);