我的简化查询如下:
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 函数的行。
但是,如果我删除外部联接,它工作正常。也就是说,以下工作:
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 中时,它会在不太可能的地方给出错误。
有任何想法吗 ?