【问题标题】:Oracle SQL - insert into select statement - errorOracle SQL - 插入选择语句 - 错误
【发布时间】:2021-02-19 23:58:45
【问题描述】:

我创建了一个插入语句,在该插入语句中我想从另一个表的另一列中提取数据。我编写了以下脚本并收到错误。

我写了实际的 select 语句,它自己工作,这里是脚本:

SELECT job_id 
FROM JOBS 
WHERE job_id IN ('AD_CMMS')

当我尝试将 insert into 语句与 select 语句合并时出现问题,下面是包含 select 语句的完整脚本:

INSERT INTO Employees
VALUES (242, 'Anouar', 'seljouki', 'seljouki84@gmail.com', '0662777081', date19-May-12,
        SELECT job_id FROM JOBS WHERE job_id IN ('AD_CMMS'), 
        16000, NULL, NULL, NULL); 

当我运行上面的脚本时,我得到了这个错误:

从第 26 行开始的错误命令 -
插入员工 值(242,'Anouar','seljouki','seljouki84@gmail.com','0662777081',date19-May-12, SELECT job_id from JOBS where job_id in('AD_CMMS'),16000,NULL,NULL,Null)
命令行错误:28 列:1
错误报告 -
SQL 错误:ORA-00936:缺少表达式
00936. 00000 - “缺少表达式”

【问题讨论】:

  • 你为什么还要麻烦引用第二个表?您从中提取的唯一列是 JOB_ID,并且您正在根据 JOB_ID 过滤该表。因此,您已经知道要插入的值,甚至无需从第二个表中进行选择。唯一真正的问题是,如果 JOBS 表中不存在 JOB_ID 的一个值,您想做什么?

标签: sql oracle subquery sql-insert


【解决方案1】:

标量子查询需要用括号括起来。此外,日期字面量语法也需要修正。

所以:

INSERT into Employees 
VALUES (
    242,
    'Anouar',
    'seljouki',
    'seljouki84@gmail.com',
    '0662777081',
    date '2012-05-19', 
    (SELECT job_id from JOBS where job_id = 'AD_CMMS'),
    16000,
    NULL,
    NULL,
    NULL
);

注意子查询不能返回多于一行,否则会报错。

您也可以将其表述为INSERT ... SELECT 声明;这保证了如果JOBS 中没有匹配,则不会插入该行:

INSERT into Employees 
SELECT 
    242,
    'Anouar',
    'seljouki',
    'seljouki84@gmail.com',
    '0662777081',
    date '2012-05-19', 
    job_id,
    16000,
    NULL,
    NULL,
    NULL
FROM JOBS 
WHERE job_id = 'AD_CMMS'

旁注:

  • 如果您需要保留问题中显示的当前日期格式,请改用to_date('19-May-12', 'dd-mon-yy')

  • 枚举插入的目标列是一个好习惯

【讨论】:

  • 我收到一条消息:插入了 1 个 Raw。问题是我去雇员表,我尝试在数据选项卡下过滤以过滤我添加的数据,但我什么也没找到。我尝试单击刷新,甚至关闭 Oracle SQL 开发人员并打开它和同样的事情
  • @AnouarSeljouki:你可能需要先commit
  • 什么是提交?请原谅我是 Oracle SQL 的新手
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
相关资源
最近更新 更多