2016-08-04 5 views
0

Запись сценария для проверки триггера (для записи), но я получаю странное сообщение об ошибке, если откажу изменения. Вот тестового скриптСтранные строки с ошибкой, за которыми следует откат в oracle11g

insert into prescription values(
    143, 115, 
    to_date('January 15, 1989, 11:00 A.M.', 
    'Month dd, YYYY, HH:MI A.M.', 
    'NLS_DATE_LANGUAGE = American'), 
    5, 12, 'hours', 12); 
select * from prescription; 
rollback; 

После прокрутки примерно на полпути через строки, возвращаемые оператором выбора таблица испаряется и я получаю удар сообщения об ошибке:

ORA-01002: fetch out of sequence 
01002. 00000 - "fetch out of sequence" 
*Cause: This error means that a fetch has been attempted from a cursor 
      which is no longer valid. Note that a PL/SQL cursor loop 
      implicitly does fetches, and thus may also cause this error. 
      There are a number of possible causes for this error, including: 
      1) Fetching from a cursor after the last row has been retrieved 
      and the ORA-1403 error returned. 
      2) If the cursor has been opened with the FOR UPDATE clause, 
      fetching after a COMMIT has been issued will return the error. 
      3) Rebinding any placeholders in the SQL statement, then issuing 
      a fetch before reexecuting the statement. 
*Action: 1) Do not issue a fetch statement after the last row has been 
      retrieved - there are no more rows to fetch. 
      2) Do not issue a COMMIT inside a fetch loop for a cursor 
      that has been opened FOR UPDATE. 
      3) Reexecute the statement after rebinding, then attempt to 
      fetch again. 

Если я бег сценария без отката, а затем выдавать откаты отдельно, все в порядке. Но это приведет к раздражающей тестовой единице позже.

ответ

1

Обнаружена проблема! Оказывает, что разработчик SQL ORACLE возвращает по умолчанию по 50 строк за раз. Поэтому после того, как я начну прокрутку вниз, он погаснет и выберет следующие 50 строк, что приведет к возможным недействительным результатам, видимым как выбор был выпущен до откат, и я получаю сообщение об ошибке. Исправлено, перейдя в базу данных preference-> и изменив размер возврата, который, к счастью, для меня был только внутри максимальной суммы, которую они позволяют (200 результатов).

+0

Итак, вы запускаете вставку в качестве инструкции, выполняете запрос в качестве инструкции, переходите от вида сетки к рабочему листу, запускаете откат в качестве инструкции, а затем возвращаетесь к виду сетки и прокручиваете вниз? Если вы пишете скрипт, почему бы не запустить его как скрипт, а не отдельные заявления? –

+0

У меня есть оператор insert, query и rollback, который я запускаю за один рабочий стол. Мне не нужно переключаться. Разработчик Sql возвращает результаты запроса в окне. Я думал, что написать кучу утверждений на листе - это сценарий. –

+1

ОК, затем вы выбираете/выделяете три утверждения и выполняете «Запуск оператора» (control-enter) всех из них вместе. Эффект один и тот же - вы даже можете увидеть его, показывая окно результатов запроса кратко. Если вы запустили скрипт (F5), то выход переходит в окно вывода сценария вместо окна «Результат запроса» (для него применяется другой предел, 5000 по умолчанию, в «Инструменты» - «Настройки» - «База данных -> Рабочий лист»). откат не выдается до тех пор, пока все выборки не будут завершены, поэтому вы не получите эту ошибку. Тем не менее, вы можете особенно хотеть выход сетки. –

Смежные вопросы