За последние 24 часа нас посетили 17589 программистов и 1405 роботов. Сейчас ищут 1903 программиста ...

Проблема с хранимой процедурой

Тема в разделе "Oracle Database", создана пользователем hellhammer, 29 май 2008.

  1. hellhammer

    hellhammer Активный пользователь

    С нами с:
    2 сен 2007
    Сообщения:
    42
    Симпатии:
    0
    Поступаю следующим стандартным образом:

    PHP:
    1. $s = OCIParse($c, "begin proc1(:in1, :in2, :out1, :out2); end;");
    2. OCIBindByName($s, ":in1", $in_var1);
    3. OCIBindByName($s, ":in2", $in_var2);
    4. OCIBindByName($s, ":out1", $out_var1);
    5. OCIBindByName($s, ":out2", $out_var2);
    6. OCIExecute($s, OCI_DEFAULT);
    Однако, переменные $out_var1 и $out_var2 в результате пусты.
    Сама процедура точно верна, т.к. обращение к ней же из Delphi проходит вполне результативно.
    В чём может быть проблема?

    Заранее спасибо.
     
  2. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    Я бы посоветовал попробовать вставить прям в процедуру все IN параметры фу-ции.
    Может OCIBindByName не может понять на ввод или на вывод использовать некоторые переменные.
     
  3. hellhammer

    hellhammer Активный пользователь

    С нами с:
    2 сен 2007
    Сообщения:
    42
    Симпатии:
    0
    Но ведь всё равно нужно эти IN параметры как-то передать в неё! Это не константы, они из формы считываются.
     
  4. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    Я бы попробовал сделать так:

    PHP:
    1.  $s = OCIParse($c, "begin proc1(".$_FROM_FORMA_1.", ".$_FROM_FORMA_2.", :out1, :out2); end;");
    2. OCIBindByName($s, ":in1", $in_var1);
    3. OCIBindByName($s, ":in2", $in_var2);
    4. OCIBindByName($s, ":out1", $out_var1);
    5. OCIBindByName($s, ":out2", $out_var2);
    6. OCIExecute($s, OCI_DEFAULT);
    И потом не забывайте что если ИН параметры не число то нужно заключать в одинарные кавычки, то есть к примеру так '".$_FROM_FORMA_1."'.

    Вообще посоветовал бы всегда использовать универсальный драйвер для работы с Б.Д., например такой как Zend_Db из Zend_Framework.
     
  5. Anonymous

    Anonymous Guest

    счас проверил у себя, все работает. Мож, библиотечку обновить?