【问题标题】:ORA-00932 when using OUTER join on a viewORA-00932 在视图上使用 OUTER 连接时
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多