3

我一直坚持在 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 AQuery 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
4

1 回答 1

1

ORA-00904 是“无效的列名”——要么你拼错了列名,要么在它前面加上了错误的表别名,从字符串文字中省略了引号,或者任何数量的其他问题。

检查错误消息提到的代码中的点是否存在此类错误。

于 2013-05-24T08:54:58.973 回答