За последние 24 часа нас посетили 17706 программистов и 1724 робота. Сейчас ищут 1098 программистов ...

проблема с вызовым Oracle процедуры

Тема в разделе "Прочие вопросы по PHP", создана пользователем nego, 20 фев 2008.

  1. nego

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

    С нами с:
    5 фев 2008
    Сообщения:
    14
    Симпатии:
    0
    Всем привет!
    Столкнулся с одной проблемкой - вызовом oracle процедуры.

    если создать примерно такой sql запрос:
    $query = ' BEGIN
    :fiSession :=
    ufOpenSession(
    :fiCust_id,
    :fiUser_id,
    :fsRemoteAddr,
    :fiLifeTim);
    END';
    и потом все перемнные сбиндить, то Oralce возвращает ошибку: ORA-06550: line 1, column 8:
    PLS-00103: Encountered the symbol "" when expecting one of the following: begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> <<
    close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe
    Но если данный sql записать в одну строку, т.е
    $query = ' BEGIN :fiSession := ufOpenSession:)fiCust_id, :fiUser_id, :fsRemoteAddr, :fiLifeTim); END';
    то все нормально. Никак не могу понять, что тут такого критичного. Простые sql запросы, с перенесенными строками обрабатываются нормально.
    Перебить все sql запросы с процедурами в одну строку нереально, т.к. проект большой. Как то видимо можно настроить клиента Orcle или нужно в коде добавить функцию, которая будет удалять переносы и табуляции?
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    кавычки двойные надо

    $query = "BEGIN


    ну или

    $query = preg_replace("/[\r\n]+/",' ',$query); но тут можно потереть данные
     
  3. nego

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

    С нами с:
    5 фев 2008
    Сообщения:
    14
    Симпатии:
    0
    Спасибо за ответ!
    Но кавычки не решают проблему, oci_parse возврщает false, а не идентификатор выражения. А вот с заменой я так тоже делал, и это помогало, но боюсь, что это действительно может какие то данные и запороть, поэтому ищу другие варианты 8-(
     
  4. nego

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

    С нами с:
    5 фев 2008
    Сообщения:
    14
    Симпатии:
    0
    Если Вы имели ввиду обнести sql запрос вместо одинарными кавычками двойными, то и это не работает. В предыдущем ответе я пытался поместить двойные кавычки внутрь запроса т.е. $query= '"BEGIN ... и эта конструкция не проходила в oci_parse
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    я вот три года назад имел такое удовольсвие. но хоть убей не помню как решилось... как-то просто...
    сорри...

    оракла под рукой нету. потестить негде.

    О! блин! вспомнил!...

    PHP:
    1.  
    2. <?php
    3. $query = ' BEGIN '.
    4. ':fiSession := '.
    5. 'ufOpenSession( '.
    6. ':fiCust_id, '.
    7. ':fiUser_id, '.
    8. ':fsRemoteAddr, '.
    9. ':fiLifeTim); '.
    10. 'END';
    11. ?>
    12.  
    мысля понятна???
     
  6. Anonymous

    Anonymous Guest

    Я лох... у меня все в оракле работает... хоть как переноси.... :(
     
  7. nego

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

    С нами с:
    5 фев 2008
    Сообщения:
    14
    Симпатии:
    0
    Ну мысля конкатинации то понятно, это все равно, что писать в одну строку :cool:. Просто проблема в том, что проект который сейчас доделывается очччень большой и просто перебивать все запросы неохото т.к. моно где нить и описаться и потом ловить добавочных блох неохото. И так работы полно. Наверняка что то нуно настроить или в самом трансляторе php или в клиенте оркла. Я вот так же подумывал, т.к. для работы с ораклом используется один и тоже клас с методом executeprocedure, то может там что нить моно было бы вкрутить для обработки sql запросов, для дальнейшей их корректной работы. Такая вот история...
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну так помоги? мил человек?
     
  9. Anonymous

    Anonymous Guest

    дык! я б с радостью... но у меня просто - все работает. :( и работало всегда... что я делаю не так?
     
  10. Sve

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

    С нами с:
    23 апр 2008
    Сообщения:
    1
    Симпатии:
    0
    Имхо линуксовый оракл не переваривает \r

    $query = str_replace('\r','',' BEGIN
    :fiSession :=
    ufOpenSession(
    :fiCust_id,
    :fiUser_id,
    :fsRemoteAddr,
    :fiLifeTim);
    END');

    Естественно, в запросе не должно быть комментариев

    У меня после этого все заработало