Всем привет! Столкнулся с одной проблемкой - вызовом 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 := ufOpenSessionfiCust_id, :fiUser_id, :fsRemoteAddr, :fiLifeTim); END'; то все нормально. Никак не могу понять, что тут такого критичного. Простые sql запросы, с перенесенными строками обрабатываются нормально. Перебить все sql запросы с процедурами в одну строку нереально, т.к. проект большой. Как то видимо можно настроить клиента Orcle или нужно в коде добавить функцию, которая будет удалять переносы и табуляции?
кавычки двойные надо $query = "BEGIN ну или $query = preg_replace("/[\r\n]+/",' ',$query); но тут можно потереть данные
Спасибо за ответ! Но кавычки не решают проблему, oci_parse возврщает false, а не идентификатор выражения. А вот с заменой я так тоже делал, и это помогало, но боюсь, что это действительно может какие то данные и запороть, поэтому ищу другие варианты 8-(
Если Вы имели ввиду обнести sql запрос вместо одинарными кавычками двойными, то и это не работает. В предыдущем ответе я пытался поместить двойные кавычки внутрь запроса т.е. $query= '"BEGIN ... и эта конструкция не проходила в oci_parse
я вот три года назад имел такое удовольсвие. но хоть убей не помню как решилось... как-то просто... сорри... оракла под рукой нету. потестить негде. О! блин! вспомнил!... PHP: <?php $query = ' BEGIN '. ':fiSession := '. 'ufOpenSession( '. ':fiCust_id, '. ':fiUser_id, '. ':fsRemoteAddr, '. ':fiLifeTim); '. 'END'; ?> мысля понятна???
Ну мысля конкатинации то понятно, это все равно, что писать в одну строку . Просто проблема в том, что проект который сейчас доделывается очччень большой и просто перебивать все запросы неохото т.к. моно где нить и описаться и потом ловить добавочных блох неохото. И так работы полно. Наверняка что то нуно настроить или в самом трансляторе php или в клиенте оркла. Я вот так же подумывал, т.к. для работы с ораклом используется один и тоже клас с методом executeprocedure, то может там что нить моно было бы вкрутить для обработки sql запросов, для дальнейшей их корректной работы. Такая вот история...
Имхо линуксовый оракл не переваривает \r $query = str_replace('\r','',' BEGIN :fiSession := ufOpenSession( :fiCust_id, :fiUser_id, :fsRemoteAddr, :fiLifeTim); END'); Естественно, в запросе не должно быть комментариев У меня после этого все заработало