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: ORA-00932: несовместимые типы данных: ожидается - получено LONG 00932. 00000 - "несовместимые типы данных: ожидается%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() сам по себе (без внешнего соединения) работает, а внешнее соединение также работает само по себе, но когда оба они включены в SQL, это дает ошибку в маловероятном месте.
Есть идеи?
1 ответ
Эта проблема может быть связана с ошибкой Oracle, как указано в нижней части следующей ссылки: http://www.dba-oracle.com/sf_ora_00932_inconsistent_datatypes_expected_string_got_string.htm
В моем случае я использовал обходной путь избегания использования представления и вместо этого использовал таблицы непосредственно, и это работало.