我一直坚持在 Oracle 中创建视图,但在创建视图之前,我总是先对其进行测试,但总是遇到此错误:Ora-00904。
这是这种情况。我有一组查询,比如说查询 A,我需要使用UNION ALL与查询 A本身结合,只需进行少量修改即可创建另一组更大的查询-查询B。让我坚持这样做的主要限制是数据库设计,我在公司没有能力改变它,所以我必须适应它。Query A联合Query A 6 次创建Query B。额外的主要约束是查询 B仅来自 1 个数据库用户,但有 54 个数据库用户具有相同的结构,我需要获取相同的查询。查询 B (db user1) unions Query B (db user2) unions Query B (db user3)依此类推,直到 54 最后创建Query C --- 最终输出。我的脚本已经达到 6048 行,然后我遇到了我在测试Query A和Query 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