【问题标题】:Missing Keyword (ORA-00905) - Erreur SQL : ORA-00905缺少关键字 (ORA-00905) - 错误 SQL:ORA-00905
【发布时间】:2019-01-18 03:46:53
【问题描述】:

我有以下语句返回上述 905 错误。有什么想法吗?

CREATE MATERIALIZED VIEW SYNT_CE CACHE USING INDEX REFRESH ON DEMAND FORCE USING DEFAULT ROLLBACK SEGMENT DISABLE QUERY REWRITE
AS
WITH SYNT_AV AS (SELECT CIRC_BV, CASE WHEN SUM(C_AVANCEMENT) > 1 THEN 'non transmis' WHEN SUM(C_AVANCEMENT) = 1 THEN 't�l�phon�' ELSE 'confirm�' END AS C_AVANCEMENT
FROM (SELECT SYNT_BV.CIRC_BV, (CASE SYNT_BV.C_AVANCEMENT WHEN 'non transmis' THEN 2 WHEN 't�l�phon�' THEN 1 WHEN 'confirm�' THEN 0 END) AS C_AVANCEMENT
FROM SYNT_BV GROUP BY SYNT_BV.CIRC_BV, (CASE SYNT_BV.C_AVANCEMENT WHEN 'non transmis' THEN 2 WHEN 't�l�phon�' THEN 1 WHEN 'confirm�' THEN 0 END)) AV GROUP BY CIRC_BV)
SELECT TO_NUMBER(SYNT_BV.CIRC_BV) AS C_CE, SYNT_BV.CIRC_BV, SYNT_BV.CIRC_BV, SYNT_BV.CIRC_BV || case WHEN SYNT_BV.CIRC_BV = '01' then 'er Ardt' WHEN SYNT_BV.CIRC_BV <> '01' then 'ème Ardt'  as L_CIRC_BV, SYNT_BV.NUMERO_TOUR, SYNT_BV.NUMERO_TOUR, SYNT_BV.DATE_TOUR, SYNT_BV.TYPE_ELECTION, SYNT_BV.LIBELLE_ELECTION,
      SUM(SYNT_BV.NB_INSCRIT)        AS NB_INSCRIT,
      SUM(SYNT_BV.NB_VOTANT)         AS NB_VOTANT,
      SUM(SYNT_BV.NB_EMARGEMENT)     AS NB_EMARGEMENT,
      SUM(SYNT_BV.NB_PROCURATION)    AS NB_PROCURATION,
      SUM(SYNT_BV.NB_EXPRIME)        AS NB_EXPRIME,
      SUM(SYNT_BV.NB_VOTE_BLANC)     AS NB_VOTE_BLANC,
      SUM(SYNT_BV.NB_VOTE_NUL)       AS NB_VOTE_NUL,
      SUM(SYNT_BV.NB_VOTE_B_NUL)     AS NB_VOTE_B_NUL,
      SUM(SYNT_BV.NB_VOTE_B_NUL_ABS) AS NB_VOTE_B_NUL_ABS,
    [...]
    ORDER BY SYNT_BV.ARR_BV;

    CREATE INDEX SYNT_AR_INDEX_C_CAINSEE ON SYNT_AR (C_CAINSEE ASC);

【问题讨论】:

  • 您似乎有一个select,但没有fromgroup by。很难找出问题所在。我建议简化、简化、简化,直到您找出错误并修复它。
  • 当代码布局正确且大小写混合时,更容易发现语法错误。你的线条太长了,我们需要使用滚动条,这让我们很难发现你可能做了什么灯笼裤。可读性是你的代码应该具备的特性。

标签: sql oracle ora-00905


【解决方案1】:

使用这个:

CREATE MATERIALIZED VIEW SYNT_CE CACHE USING INDEX REFRESH ON DEMAND FORCE USING     DEFAULT ROLLBACK SEGMENT DISABLE QUERY REWRITE
AS
WITH SYNT_AV AS (SELECT CIRC_BV, CASE WHEN SUM(C_AVANCEMENT) > 1 THEN 'non transmis'     WHEN SUM(C_AVANCEMENT) = 1 THEN 't�l�phon�' ELSE 'confirm�' END AS C_AVANCEMENT
FROM (SELECT SYNT_BV.CIRC_BV, (CASE SYNT_BV.C_AVANCEMENT WHEN 'non transmis' THEN 2     WHEN 't�l�phon�' THEN 1 WHEN 'confirm�' THEN 0 END) AS C_AVANCEMENT
FROM SYNT_BV GROUP BY SYNT_BV.CIRC_BV, (CASE SYNT_BV.C_AVANCEMENT WHEN 'non transmis' THEN 2 WHEN 't�l�phon�' THEN 1 WHEN 'confirm�' THEN 0 END)) AV GROUP BY CIRC_BV)
SELECT TO_NUMBER(SYNT_BV.CIRC_BV) AS C_CE, SYNT_BV.CIRC_BV, SYNT_BV.CIRC_BV, SYNT_BV.CIRC_BV || case WHEN SYNT_BV.CIRC_BV = '01' then 'er Ardt' WHEN SYNT_BV.CIRC_BV <> '01' then 'ème Ardt' END as L_CIRC_BV, SYNT_BV.NUMERO_TOUR, SYNT_BV.NUMERO_TOUR, SYNT_BV.DATE_TOUR, SYNT_BV.TYPE_ELECTION, SYNT_BV.LIBELLE_ELECTION,
  SUM(SYNT_BV.NB_INSCRIT)        AS NB_INSCRIT,
  SUM(SYNT_BV.NB_VOTANT)         AS NB_VOTANT,
  SUM(SYNT_BV.NB_EMARGEMENT)     AS NB_EMARGEMENT,
  SUM(SYNT_BV.NB_PROCURATION)    AS NB_PROCURATION,
  SUM(SYNT_BV.NB_EXPRIME)        AS NB_EXPRIME,
  SUM(SYNT_BV.NB_VOTE_BLANC)     AS NB_VOTE_BLANC,
  SUM(SYNT_BV.NB_VOTE_NUL)       AS NB_VOTE_NUL,
  SUM(SYNT_BV.NB_VOTE_B_NUL)     AS NB_VOTE_B_NUL,
  SUM(SYNT_BV.NB_VOTE_B_NUL_ABS) AS NB_VOTE_B_NUL_ABS,
[...]
ORDER BY SYNT_BV.ARR_BV;

CREATE INDEX SYNT_AR_INDEX_C_CAINSEE ON SYNT_AR (C_CAINSEE ASC);

您在 CASE 语句的末尾漏掉了 END 个字。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 2010-09-23
    • 2023-03-22
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多