错误 - 未在预期位置找到关键字

Posted

技术标签:

【中文标题】错误 - 未在预期位置找到关键字【英文标题】:Error - Keyword not found where expected 【发布时间】:2015-08-24 09:41:29 【问题描述】:

我正在尝试使用 oracle 10g 中的以下代码创建一个表,每次我收到以下错误:

ORA-00923:在预期的地方找不到 FROM 关键字

查询如下:

Create table Tab2 nologging as
select /*+parallel(a,6)*/  Tab1col1, Tab1col2,
MAX(case when tab1Col5 = '21-aug-2015' then Tab1Col3 end) 21AUGBALANCE,
MAX(case when tab1Col5 = '22-aug-2015' then Tab1Col3 end) 22AUGBALANCE,
MAX(case when tab1Col5 = '23-aug-2015' then Tab1Col3 end) 23AUGBALANCE
from Tab1 a
GROUP BY msisdn, sdp_node
order by msisdn, sdp_node

表 1 有 5 列,即tab1Col1, tab1Col2, Tab1Col3, Tab1Col4 and Tab1Col5. 我需要从 Tab1 创建 Tab2,它也有 5 列 1、2、3、4、5。但是这段代码有什么错误呢?

【问题讨论】:

【参考方案1】:

试试

Create table Tab2 nologging as
select /*+parallel(a,6)*/  Tab1col1, Tab1col2,
MAX(case when tab1Col5 = '21-aug-2015' then Tab1Col3 end) "21AUGBALANCE",
MAX(case when tab1Col5 = '22-aug-2015' then Tab1Col3 end) "22AUGBALANCE",
MAX(case when tab1Col5 = '23-aug-2015' then Tab1Col3 end) "23AUGBALANCE"  
from Tab1 a
GROUP BY msisdn, sdp_node
order by msisdn, sdp_node

oracle 支持以数字开头的列名,但如果您想要以数字开头的列名,则必须引用它们。

或者,选择不同的名称(例如 BALANCE21AUG)

【讨论】:

【参考方案2】:

您对列别名有疑问 尝试像这样使用双引号“”

 Create table Tab2 nologging as
 select /*+parallel(a,6)*/  Tab1col1, Tab1col2,
 MAX(case when tab1Col5 = '21-aug-2015' then Tab1Col3 end) "21AUGBALANCE",
 MAX(case when tab1Col5 = '22-aug-2015' then Tab1Col3 end) "22AUGBALANCE",
 MAX(case when tab1Col5 = '23-aug-2015' then Tab1Col3 end) "23AUGBALANCE"
 from Tab1 a
 GROUP BY msisdn, sdp_node
 order by msisdn, sdp_node

【讨论】:

【参考方案3】:

问题是无效的别名,所以使用双引号来解决问题

Create table Tab2 nologging as
    select /*+parallel(a,6)*/  Tab1col1, Tab1col2,
    MAX(case when tab1Col5 = '21-aug-2015' then Tab1Col3 end) as "21AUGBALANCE",
    MAX(case when tab1Col5 = '22-aug-2015' then Tab1Col3 end) as "22AUGBALANCE",
    MAX(case when tab1Col5 = '23-aug-2015' then Tab1Col3 end) as "23AUGBALANCE"
    from Tab1 a
    GROUP BY msisdn, sdp_node
    order by msisdn, sdp_node

【讨论】:

【参考方案4】:

在别名上使用引号。

Create table Tab2 nologging AS
SELECT Tab1col1, Tab1col2,
MAX(CASE WHEN tab1Col5 = '21-aug-2015' THEN Tab1Col3 END) AS "21AUGBALANCE",
MAX(CASE WHEN tab1Col5 = '22-aug-2015' THEN Tab1Col3 END) AS "22AUGBALANCE",
MAX(CASE WHEN tab1Col5 = '23-aug-2015' THEN Tab1Col3 END) AS "23AUGBALANCE"
FROM Tab1 a
GROUP BY msisdn, sdp_node
ORDER BY msisdn, sdp_node

【讨论】:

以上是关于错误 - 未在预期位置找到关键字的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中选择 SEQUENCE:FROM 关键字未在预期的位置找到

用错误解决的案例语句 - 未在预期的地方找到 FROM 关键字

oracle sql listagg [重复]

从关键字在 PL-SQL 中未找到预期的位置

将 CASE 与表连接一起使用

我如何从springboot调用用户定义的sql函数?