Oracle 22 Соединения или более не разрешены в утверждении выбора? ORA-01445 - PullRequest
2 голосов
/ 16 сентября 2011

ORA-01445: невозможно выбрать ROWID или просмотреть образец соединения без таблица с ключами

У меня длинное предложение select для ORACLE 10g. Согласно этому сообщению об ошибках, я видел некоторые ответы на Google. Один из ответов говорит это;

* ограничение на количество таблиц в соединении. Я столкнулся с необычной ошибкой (4204878/3765373/3004824) в Oracle 9.2.0.5. Когда более 22 ANSII объединения выполняются в операторе выбора, который происходит ORA-01445. В соответствии с Поддержка "1- Один так

Я считаю количество соединений внутри целого блока выбора; равен 23 (после выбора и после предложения where). SP, у которого есть это выражение "selec", работало отлично, пока я не добавил это новое соединение после предложения where ...

Короче говоря, я проверил, отключив одно из существующих объединений и включив мое новое добавленное объединение, и SP сработал.

Как вы думаете, есть ли какие-то ограничения?

** Я не могу дать вам адрес веб-сайта, поскольку пользователи StackOverflow всегда находят его размазанным.

Ответы [ 2 ]

5 голосов
/ 16 сентября 2011

Я сталкивался с этими ошибками пару раз. Это часто случалось в 9i с соединениями ANSI, и я обнаружил, что это случается реже в 10g.

Один из обходных путей - переписать объединение, чтобы использовать «старый» синтаксис объединения, особенно внешние объединения, как указано APC :

SELECT *
  FROM a, b
 WHERE a.a_id = b.a_id (+)
2 голосов
/ 04 мая 2012

Я решил эту проблему, просто выбрав столбцы, которые я использовал в запросе.

Из этого:

select a.column1, b.column3
  from a
  join b on b.column2 = a.column2

К этому:

select a.column1, b.column3
  from (select column1, column2 from a) a
  join (select column2, column3 from b) b on b.column2 = a.column2
...