【发布时间】:2012-06-22 14:31:40
【问题描述】:
我的简化查询如下:
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 中时,它会在不太可能的地方给出错误。
有什么想法吗?
【问题讨论】:
-
tablec.columnc是什么数据类型? (顺便说一句。混淆表名和列名并没有真正的帮助)。而且你真的应该在 where 子句中使用显式JOIN语法而不是隐式连接。 -
很抱歉。在我的原始查询中有 26 列和 9 个表,因此我认为说明一个简化的 SQL 更容易。 c.columnC 是注释中所述的 LONG 类型
-
我尝试过使用显式的 LEFT OUTER JOIN 语法,但结果是一样的。
-
关于
JOIN语法的评论并不是为了解决您的问题,而是作为一般的“好建议”。
标签: oracle10g outer-join ora-00932