2012-06-20 3 views
1

Мой упрощена запрос следующим образом: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, он дает ошибку в маловероятном месте.

Любые идеи?

+0

Какой тип данных является 'tablec.columnc'? (Btw. Обфускация таблиц и имен столбцов не очень помогает). И вы действительно должны использовать явный синтаксис 'JOIN' не подразумеваемых объединений в предложении where. –

+0

Извините. В моем исходном запросе 26 столбцов и 9 таблиц, поэтому я подумал, что проще проиллюстрировать упрощенный SQL. c.columnC имеет тип LONG, как указано в Notes – AKS

+0

Я пробовал использовать явный синтаксис LEFT OUTER JOIN, но результаты те же. – AKS

ответ

1

Этот вопрос мог бы быть из-за ошибки Oracle, как указывалось в нижней части по следующей ссылке: http://www.dba-oracle.com/sf_ora_00932_inconsistent_datatypes_expected_string_got_string.htm

В моем случае, я использовал обходным избегать использования вида и вместо использовали таблицы напрямую, и это сработало.