【问题标题】:ORA-03001: unimplemented featureORA-03001: 未实现的功能
【发布时间】:2019-07-21 15:11:51
【问题描述】:

我遇到这个错误 ORA-00972: identifier is too long when execution the following script.

SELECT distinct
"   AMACADRAD_1.APP_PRTFL_ID                 ""Portfolio ID"""
",  AMCIDRCD_1.CI_LONG_DN                    ""Application Description"""
",  AMCIDRCD_1.CI_NM                         ""Application Name"""
"

【问题讨论】:

  • (1) 请正确标记。 Oracle 错误来自 Oracle。 (2) 你不明白错误的哪一部分?似乎很清楚。 (3) 为什么到处都是双引号?
  • 如果双引号被删除,我会得到一个错误,说非法零长度标识符
  • 你用什么客户端来运行这个?投影中每一行末尾的""是什么意思?
  • @APC 只是一种推测,但 OP 的查询看起来像 Java SQL 查询字符串的片段,双引号标识符未正确转义。显然,它不会运行,你的答案是一个很好的猜测 +1。
  • 该查询片段没有意义,请edit您的问题并添加完整语句。另外:您使用的是哪个 Oracle 版本?你可以看到,例如select banner from v$version

标签: sql oracle


【解决方案1】:

在 SQL 中,双引号用于定义标识符。它们是可选的,但如果包含它们,它们将改变名称中有效字符的性质。例如_EMP 不是有效的表名,但"_EMP" 是。

如果您考虑查询,所有内容都用双引号括起来,这意味着所有内容都被视为标识符。该字符串长度为 44 个字符(包括空格)...

"   AMACADRAD_1.APP_PRTFL_ID                 "

...这就是 Oracle 抛出 ORA-00972 的原因。

此外,您极不可能有类似...的列

",  to_char(AMCIDRCD_1.SRC_SYS_UPD_DT,'DD-MON-YYYY HH24:MI:SS')      "

...所以您的查询也会在 ORA-00904 上失败。

幸运的是,解决方案非常简单:只需去掉双引号即可。好吧,如果您确实需要带有空格的列别名,请保留它们,例如 "Application Description"。但删除所有其他人。

这意味着您的查询应该如下所示:

SELECT distinct
 AMACADRAD_1.APP_PRTFL_ID                 "Portfolio ID"
,  AMCIDRCD_1.CI_LONG_DN                    "Application Description"
,  AMCIDRCD_1.CI_NM                         "Application Name"
,  decode(( AMCSDRHMLCD_1.MSTR_L_COL_ID ),'ML_CI_STAT_KY',( AMCSDRHMLCD_1.DSPLY_DN ),'does not apply',( AMCSDRHMLCD_1.DSPLY_DN ),'not found',( AMCSDRHMLCD_1.DSPLY_DN ),'not avail',( AMCSDRHMLCD_1.DSPLY_DN ))   "Status Description"
,  AMIAOAODRAGOHD_2.ASGN_GRP_ORG_LVL_2_NM   "Biz Asset Owner Level 2 Name"
,  AMCIDRCD_1.BUS_OWN_EMAIL_NM_LIST_TX      "Bus Owner Email"
,  AMCIDRCD_1.IT_ASSET_OWN_CNTCT_TX         "IT Owner Email Address" 
,  decode(( AMCSDRHMLCD_3.MSTR_L_COL_ID ),'ML_DATA_CLS_KY',( AMCSDRHMLCD_3.DSPLY_DN ),'does not apply',( AMCSDRHMLCD_3.DSPLY_DN ),'not found',( AMCSDRHMLCD_3.DSPLY_DN ),'not avail',( AMCSDRHMLCD_3.DSPLY_DN ))   "Data Class"
,  decode(( AASDDRAASD_1.MSTR_L_COL_ID ),'ML_CI_CRTCLTY_KY',( AASDDRAASD_1.DSPLY_DN ),'does not apply',( AASDDRAASD_1.DSPLY_DN ),'not found',( AASDDRAASD_1.DSPLY_DN ),'not avail',( AASDDRAASD_1.DSPLY_DN ))   "Business Criticality"
,  to_char(AMCIDRCD_1.SRC_SYS_UPD_DT,'DD-MON-YYYY HH24:MI:SS')      "CI Updated"

FROM ITR23.APP_CI_DTL_F adf
inner join ITR23.APP_D  AMACADRAD_1
on  AMACADRAD_1.app_ky = adf.app_ky

那些 DECODE() 语句看起来不对,我猜不出你想用它们做什么。

【讨论】:

  • OP 的 select 语句似乎不是一个双引号的术语,运行它时我得到 ORA-00936: missing expression
  • @TimBiegeleisen - 很有趣。我尝试在 dbfiddle 上运行并得到 ORA-03001: unimplemented feature,所以我只是在猜测。
  • @sonikasonu - 如果此答案对您有帮助,请考虑接受。接受的答案提高了本网站作为未来寻求者资源的价值。
猜你喜欢
  • 2014-03-31
  • 1970-01-01
  • 2021-12-12
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 2016-04-05
  • 2017-09-30
相关资源
最近更新 更多