【问题标题】:Oracle invalid identifier when using table alias使用表别名时 Oracle 标识符无效
【发布时间】:2015-08-24 19:17:39
【问题描述】:

我有一个使用 with 语句创建两个别名表的查询:

WITH Rev AS
(SELECT *
   FROM FORECAST.REVENUE_SUMMARY
  WHERE FORECAST.REVENUE_SUMMARY.FEE_CD_ACT_SUM_ACCTG_DA >= to_date('10/01/2013', 'mm/dd/yyyy')
    AND FORECAST.REVENUE_SUMMARY.FEE_CD_ACT_SUM_ACCTG_DA < to_date('10/01/2014', 'mm/dd/yyyy')
),
Mon_pv as 
(select to_char(FEE_CD_ACT_SUM_ACCTG_DA, 'MON') as "Mon", 
        Fee_CD, 
        Fee_NM, 
        SUM(CASH_DAILY_CL) as "Collections" 
   from Rev 
 group by to_char(FEE_CD_ACT_SUM_ACCTG_DA, 'MON'), 
          Fee_CD, 
          Fee_NM
)
select distinct Mon 
  from Mon_pv
;

Mon_pv 表中的“Mon”只是一个派生的月份列。所以在最后的查询中,我要做的就是选择一个不同月份名称的列表,但它给了我一个错误,说“Mon 是一个无效的标识符”。最终,我希望能够在数据透视表中使用它来创建月份名称之外的列。但是任何使用“Mon”作为列的查询都会引发错误。但是当我使用 Select * from Mon_pv "Mon" 时,它会显示为一列。为什么我在最后的 Select 语句中特别提到列名时会抛出错误?

【问题讨论】:

  • 您是否尝试更改别名?
  • 如果在查询的最后部分也对"Mon" 应用双引号怎么办?
  • 没有也没试过。但是在最后一个选择语句中将列名放在引号中是有效的。我什至从未想过我可能不得不这样做。
  • "Mon" 是与 Mon 不同的标识符。详见手册:docs.oracle.com/cd/E11882_01/server.112/e41084/…

标签: sql oracle


【解决方案1】:

正如在 cmets 中已经提到的:"Mon"Mon 不是同一个标识符。当您将标识符放在双引号中时,它会区分大小写(并且还允许使用更多种类的字符)。不使用双引号时,名称会自动转换为大写。所以MonMONmon都读作MON,但"Mon"不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多