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

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

Другие вопросы по тегам