Мой упрощена запрос следующим образом:ORA-00932 при использовании OUTER JOIN на представлении
INSERT INTO table1
(acct_no, name, description)
SELECT a.acct_no,
b.name,
TO_LOB(c.description)
FROM tableA a, viewB b, tableC c
WHERE a.person_id = b.person_id(+)
AND a.person_id = c.person_id;
Примечания: Я использую Oracle 10g, table1.description имеет тип LOB, c.description имеет тип LONG , viewB вид, table1.name имеет тот же тип данных, как b.name
Вышеприведенные возвращает запрос:
SQL Error: ORA-00932: несовместимые типов данных: ожидается - получил LONG 00932. 00000 - «непоследовательные типы данных: exp ected% s получено% s "
Ошибка указывает на строку, где я использую функцию TO_LOB.
Однако, если я удаляю Outer join, он отлично работает. То есть, следующие работы:
INSERT INTO table1
(acct_no, name, description)
SELECT a.acct_no,
b.name,
TO_LOB(c.description)
FROM tableA a, viewB b, tableC c
WHERE a.person_id = b.person_id
AND a.person_id = c.person_id;
Но мне нужно использовать внешнее соединение, и я не могу понять, почему использование внешнего соединения на viewB вызывает противоречивую ошибку типа данных на поле в другой таблице (tableC).
В принципе, TO_LOB() сам по себе (без внешнего соединения) работает, а Outer join тоже работает, но когда оба включены в SQL, он дает ошибку в маловероятном месте.
Любые идеи?
Какой тип данных является 'tablec.columnc'? (Btw. Обфускация таблиц и имен столбцов не очень помогает). И вы действительно должны использовать явный синтаксис 'JOIN' не подразумеваемых объединений в предложении where. –
Извините. В моем исходном запросе 26 столбцов и 9 таблиц, поэтому я подумал, что проще проиллюстрировать упрощенный SQL. c.columnC имеет тип LONG, как указано в Notes – AKS
Я пробовал использовать явный синтаксис LEFT OUTER JOIN, но результаты те же. – AKS