0

我的简化查询如下:

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 中时,它会在不太可能的地方给出错误。

有任何想法吗 ?

4

1 回答 1

1

此问题可能是由于以下链接底部指出的 Oracle 错误: http ://www.dba-oracle.com/sf_ora_00932_inconsistent_datatypes_expected_string_got_string.htm

在我的例子中,我采用了一种避免使用视图的变通方法,而是直接使用表并且它起作用了。

于 2012-06-21T10:20:18.833 回答