ORA-22806(不是对象或 REF)关于加入视图

Posted

技术标签:

【中文标题】ORA-22806(不是对象或 REF)关于加入视图【英文标题】:ORA-22806 (not an object or REF) on Join to a view 【发布时间】:2016-01-19 07:27:29 【问题描述】:

这是一个引发此错误的相当简单的查询:

SELECT RR.REQUEST_ID
FROM CCS_REQUEST_RESPONSE RR 
INNER JOIN VW_STUDENT_CURRENT_AND_HIST VW
ON RR.STUDENTID = VW.STUDENT_NUMBER

这仅在加入视图时发生。 该视图是所有 2 个相同表的简单联合。 当我在上述查询中替换单个表而不是视图时,它可以正常工作。

所以,

SELECT RR.REQUEST_ID
FROM CCS_REQUEST_RESPONSE RR 
INNER JOIN HISTORICAL_STUDENTS VW
ON RR.STUDENTID = VW.STUDENT_NUMBER

工作得很好。

这是视图:

 CREATE OR REPLACE VIEW "VW_STUDENT_CURRENT_AND_HIST" ("STUDENT_NUMBER") AS 
  SELECT "STUDENT_NUMBER"
    FROM HISTORICAL_STUDENTS
UNION ALL
  SELECT "STUDENT_NUMBER"
      FROM CURRENT_YEAR_STUDENTS;

有趣的是,这曾经可以工作,但突然停止了。 有什么想法吗?

【问题讨论】:

无法将 student_number 转换为 SELECT CAST(STUDENT_NUMBER AS NUMBER(9)) AS STUDENT_NUMBER 中的数字 请使用DESC描述所有表格。 【参考方案1】:

已解决。

视图中的两个表虽然在字段名称和定义方面相同,但具有不同的字段顺序。 我使用与另一个相同的 DDL 删除并重新创建了其中一个表,现在它工作正常。

我不知道为什么这会是个问题,但也许其他人可以回答这个问题。

【讨论】:

“我不知道为什么会出现问题” 这是一个问题,因为 UNION 中的子查询必须具有与 数据类型的数量匹配的投影 列。我猜你的列有不同的数据类型,因此列(不是字段)的顺序在两个投影中必须相同。

以上是关于ORA-22806(不是对象或 REF)关于加入视图的主要内容,如果未能解决你的问题,请参考以下文章

关于ref的使用

关于组件间传递ref对象的思考

allegro关于连上走线还是有飞线的问题

什么是定义网站中的ref struct

TypeError:未定义不是对象(评估'_ref.state)

ref属性与props配置项