Ошибка «слишком много строк» ​​внутри цикла «для» курсора - PullRequest
1 голос
/ 15 июня 2010

У меня есть триггер, который содержит две петли курсоров, одна вложена в другую, как это:

FOR outer_rec IN outer_cursor
LOOP
  FOR inner_rec IN inner_cursor
  LOOP
     -- Do some calculations
  END LOOP;

END LOOP;

Где-то в этом он выдает следующую ошибку:

ORA-01422:Точная выборка возвращает больше, чем запрошенное количество строк

Я пытался определить, откуда он исходит в течение часа или около того ... но не должна ли эта ошибка произойти?

Также .. IЯ предполагаю, что внутренний цикл автоматически закрывается и открывается снова каждый раз, когда внешний цикл переходит к следующей записи, я надеюсь, что это правильно.

Ответы [ 3 ]

1 голос
/ 15 июня 2010

Из того, что я знаю, ORA-01422 срабатывает только в том случае, если у вас есть оператор SELECT...INTO в блоке PL / SQL, где оператор select выбирает более 1 строки. Помните, что SELECT..INTO может извлечь только одну строку, если выбрано более одной строки, возникает указанное выше исключение.

0 голосов
/ 15 июня 2010

Я вызывал хранимую процедуру с переменной OUT, и каким-то образом, когда она пыталась использовать переменную out, произошла эта ошибка.

0 голосов
/ 15 июня 2010

Вы также можете получить 1422 для оператора UPDATE, который выполняет SELECT для своих значений.

Вы не получаете трассировку стека с номером строки?

...