我坚持在Oracle中创建一个视图,但在创建视图之前,我总是首先测试它并且我总是遇到这个错误:Ora-00904。
就是这种情况。我有一个查询集,请说 查询A ,我需要使用 UNION ALL 与< strong>查询A 本身,只有少量修改应用于创建另一个更大的查询集 - 查询B 。让我这么做的主要限制因素是数据库设计,我不会在公司中改变它,所以我必须适应它。 查询A 联盟查询A 6次,创建查询B 。附加的主要约束是查询B 仅来自1个数据库用户,但是有54个数据库用户具有获取相同查询所需的相同结构。 查询B(db user1)联合查询B(db user2)联合查询B(db user3)等等,直到54,然后最终创建< strong>查询C ---最终输出。我的脚本已经达到了6048行,然后我遇到了这个问题,当我测试查询A 和查询B 时,我没有得到这个问题。我的所有表名,所有者名和列名都是正确的,但我收到了这个错误。
这是代码(需要重复54x6次) - 查询A.查询B仅应用一些类似的修改。:
Select
'2013' "YEAR",
Upper(a.text_month) "MONTH",
Upper('Budget') "VERSION",
case
when length(b.level1_name) > 5 then 'Parent'
else 'SUBSIDIARIES'
end "COMPANY_GROUP",
case
when length(b.level1_name) < 6 and b.level1_name <> '1000' then 'Subsidiaries'
else '1000 Parent'
end "COMPANY",
case
when length(b.level1_name) < 6 and b.level1_name <> '1000' then 'SUBS'
else '1000'
end "COMPANY_CODE",
case
when length(b.level1_name) > 5 then 'Parent'
else 'SUBSIDIARIES'
end "COMPANY_NAME",
b.level1_displayname "DIVISION",
b.level1_name "DIVISION_CODE",
case
when length(b.level1_name) > 5 then ltrim(upper(substr(b.level1_displayname, 8)))
else upper(ltrim(substr(b.level1_displayname, 10)))
end "DIVISION_NAME",
upper(a.text_nature_of_trip) "NATURE_OF_TRAVEL",
upper(a.text_placeeventstraining) "TRAVEL_DETAILS",
upper(a.text_country) "COUNTRY",
a.text_name_of_employee "EMPLOYEE_NAME", a.float_no_of_attendees "NO_OF_ATTENDEES",
a.text_sponsored "SPONSORED",
a.text_remarks "REMARKS",
'OTHER TRAVEL EXPENSES' "COST_ELEMENT",
a.FLOAT_702120005_OTHER_TRAVEL_E "AMOUNT"
From PUBLISH_PNL_AAAA_2013.et_travel_transaction a,
PUBLISH_PNL_AAAA_2013.cy_2elist b
Where a.elist = b.level3_iid
答案 0 :(得分:1)
ORA-00904是“无效的列名” - 要么错误地拼写了列名,要么用错误的表别名作为前缀,从字符串文字中省略引号或任何其他问题。
检查代码中的错误消息提及的错误。