【问题标题】:How to resolve missing SELECT keyword error when trying to insert select尝试插入选择时如何解决缺少 SELECT 关键字错误
【发布时间】:2020-04-03 14:29:50
【问题描述】:

不管我如何写这个语句,我总是得到 ORA-00928 missing select keyword 错误。

我正在尝试将查询中的值插入到表中。查询的结果与需要插入的表具有相同数量的列。我曾尝试将其作为 CTE。即使是来自现有表的选择查询也会返回相同的错误。

代码如下:

WITH FIRST_CTE(FrstCol1,FrstCol2)
AS
(
  SELECT 't', '1' from dual UNION ALL
  SELECT 's', '2' from dual
)
,

SECOND_CTE(SndCol1,SndCol2)
AS
(
  SELECT 't', '3' from dual UNION ALL
  SELECT 'z', '4' from dual
)

INSERT INTO TABLE_1
SELECT *
from 
(SELECT * FROM FIRST_CTE) A
JOIN 
(SELECT * FROM SECOND_CTE) B
ON A.FrstCol1 = B.SndCol1
;

有什么建议吗?

【问题讨论】:

  • 您问题中的代码看起来不错。
  • table_a 中有多少列?
  • 您是将其输入到工具中还是来自脚本文件?如果是脚本文件,请检查行终止符(例如,在 Linux 上运行脚本时您有 CRLF 行终止符)。
  • 你确定table_a和table_b的名字不是保留字吗?
  • 这是实际的SQL语句,还是真正的复杂?

标签: sql oracle sql-insert


【解决方案1】:

如果将INSERT 部分放在开头不会出现问题,因为SELECT 语句以WITH 子句开头(对于这种情况)

INSERT INTO TABLE_1
WITH FIRST_CTE(FrstCol1,FrstCol2)
AS
(
  SELECT 't', '1' from dual UNION ALL
  SELECT 's', '2' from dual
)
,

SECOND_CTE(SndCol1,SndCol2)
AS
(
  SELECT 't', '3' from dual UNION ALL
  SELECT 'z', '4' from dual
)
SELECT *
from 
(SELECT * FROM FIRST_CTE) A
JOIN 
(SELECT * FROM SECOND_CTE) B
ON A.FrstCol1 = B.SndCol1;

前提是TABLE_1是这样一个表,被创建为

create table TABLE_1(FrstCol1 varchar2(100),FrstCol2 varchar2(100),
                      SndCol1 varchar2(100), SndCol2 varchar2(100))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2016-07-27
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多