DBD :: Oracle и ошибка DBI в Perl - PullRequest
0 голосов
/ 12 мая 2011

У меня странная проблема с Perl и модулем DBI.Иногда я могу получить запрос успешно, но иногда, когда я добавляю строку кода, которая удаленно связана с доступом к базе данных или что-то в этом роде, я получаю сообщение об ошибке:

DBD :: Oracle:: st fetchrow_array завершилась неудачно: ОШИБКА не выполняется ни один оператор (возможно, вам нужно сначала вызвать execute) [для оператора «select * from (...)»] в строке script.pl 18.

Я подтвердилиспользуя sqlplus, моя команда select не имеет здесь никаких проблем (конечно, именно поэтому я сказал, что скрипт иногда работал!)

Если я добавил точку с запятой после команды select в скрипте perl, я получил еще одну ошибку::

Подготовка DBD :: Oracle :: db завершилась неудачно: ORA-00911: недопустимый символ (ОШИБКА DBD: ошибка, возможно, рядом с индикатором <*> на символе 970 в 'select * from (...)<*>; ') [для утверждения "выберите * из (...);"] в строке script.pl 13.

Может кто-нибудь предложить мне, что здесь происходит?Это потому, что команда sql слишком длинная (~ 900 символов)?

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Эта ошибка означает, что вы подготовили оператор, но не выполнили его.Вы также можете получить его, если подготовили оператор, выполнили его и извлекли все строки, а затем снова вызвали fetch, но я не уверен в этом.Не ставьте точку с запятой в конце SQL в этом случае, так как это не требуется.

См. https://metacpan.org/pod/DBI#Executed для указанного исполняемого атрибута.

0 голосов
/ 21 марта 2014

У меня была та же проблема, и я заметил, что у меня был fetchrow_array после выборки, это была проблема.

while ($sth->fetch) {

  sth->fetchrow_array;
  $myvar = some logic here
  $myvar2 = some other logic here

}

Я удалил sth-> fetchrow_array;и теперь все работает :) 1004 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...