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)关于加入视图的主要内容,如果未能解决你的问题,请参考以下文章