Выполнить dbms_mview.refresh из CodeIgniter - PullRequest
0 голосов
/ 19 октября 2011

Мне нужно выполнить EXECUTE dbms_mview.refresh('MATERIALIZED_VIEW_NAME'), вызывая этот пакет из модели, но когда я пытаюсь сделать это с помощью следующего предложения:

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

Но я получаю ошибку базы данных из этой строки в модели. Я также пробовал с db->store_procedure, но он тоже не работал.

Любая подсказка, как назвать пакет? Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

Ну, похоже, мне наконец удалось решить проблему.Я публикую свое решение, может быть, оно может помочь кому-то еще.

Похоже, что при разборе параметров, передаваемых процедуре, происходит сбой 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);

И это сработало!

Ура, Vero

0 голосов
/ 20 октября 2011

Ну, я никогда раньше не слышал о CodeIgniter, но мое обоснованное предположение состоит в том, что вы используете запрос $ this -> $ db-> и вы не передаете ему запрос?

Я думаю, что если он вообще поддерживает хранимые процедуры, возможно, есть функция $ this -> $ db-> call_function или $ this -> $ db-> call_procedure, или что-то еще?

Извините, это действительно вопрос Codeigniter, а не вопрос Oracle.

...