Oracle SQL 中的插入选择查询缺少表达式错误
Posted
技术标签:
【中文标题】Oracle SQL 中的插入选择查询缺少表达式错误【英文标题】:Missing expression Error with Insert Select query in Oracle SQL 【发布时间】:2021-10-22 23:18:35 【问题描述】:我在使用插入选择查询的 Oracle SQL 时遇到了这个错误,但不知道错误来自哪里 SQL 查询是:
insert into GroupScenarioAction (ID, ID_UUID, GPSCENARIO_UUID, ACTION, VERSION)
(select DEFAULT , '0', ACTION.ID_UUID, '5310AFAA......', '1', ACTION_ID, '0'
from ACTION where ACTION.id not in (select ACTION FROM GroupScenarioAction where
GPSCENARIO = '1'));
错误是 ORA-00936:缺少表达式位置 129
【问题讨论】:
通常是INSERT .... SELECT ...;
而不是INSERT ... (SELECT ...);
我试过@JonArmstrong
计算插入列列表中的列数和 SELECT 列表中的值数......在你的问题中。不是你的照片。提供CREATE TABLE
语句。
虽然您发布的问题有拼写错误/错误,但我认为问题在于您使用了DEFAULT
。而不是使用DEFAULT
,只需从插入列表中删除该列并从选择列表中删除DEFAULT
术语,如下所示:dbfiddle.uk/…
我无法复制粘贴代码,它们在另一台机器上,我使用 vm 进行编码。但我添加了一些图片以获取更多详细信息。 @jonArmstrong
【参考方案1】:
很难提供帮助,因为
您将相关数据发布为 图像(为什么您希望我们输入所有这些以便我们可以尝试?)而不是 代码(很容易复制/粘贴后使用) 您发布的代码(insert
语句本身)使用的列在您发布的描述的任何表中都不存在
例如,insert
插入到GroupScenarioAction
,但那里没有这样的表;也许是goroohscenarioaction
?或者,action
表中没有 action_id
列
您正在将值插入 5 列,但 select
语句包含 7 列;引发ORA-00913: too many values
错误,您甚至不会遇到 missing expression 错误
很快,好像您竭尽全力阻止我们帮助您。
你发布的一个 cmets 说
这是主键,那么这些值应该来自哪里?
这是default
中的关键字
insert into GroupScenarioAction (ID, ...)
(select DEFAULT, ...
-------
this
看起来ID
列是作为标识列创建的,其值是自动生成的(即 Oracle 会处理它),这也意味着您使用的是 Oracle 12c 或更高版本(在较低版本中没有这样的选项版本)。另一方面,create table goroohscenarioaction
声明并没有暗示类似的东西。
无论如何:如果你这样做正确,它会起作用。我创建了两个带有最小列集的示例表,只是为了使insert
工作。另外,因为我在 11gXE 上(它不支持标识列,所以我插入了一个序列值,基本上,无论如何,标识列在后台使用 ):
SQL> create table groupscenarioaction
2 (id number,
3 id_uuid raw(255),
4 gpscenario_uuid raw(255),
5 action number,
6 version number
7 );
Table created.
SQL> create table action
2 (id_uuid raw(255),
3 id number
4 );
Table created.
SQL> create sequence seq;
Sequence created.
插入您发布的内容;我注释掉了不存在或多余的列。它工作;虽然,没有插入任何东西,因为我的表是空的,但它不会引发任何错误:
SQL> insert into GroupScenarioAction
2 (ID, ID_UUID, GPSCENARIO_UUID, ACTION, VERSION)
3 (select 1 /*DEFAULT*/ , '0', ACTION.ID_UUID, '5310AFAA......', '1' --, id /*ACTION_ID*/, '0'
4 from ACTION
5 where ACTION.id not in (select ACTION FROM GroupScenarioAction
6 where gpscenario_uuid/*GPSCENARIO*/ = '1'));
0 rows created.
美化:
SQL> insert into groupscenarioaction
2 (id, id_uuid, gpscenario_uuid, action, version)
3 (select seq.nextval, '0', a.id_uuid, '5310AFAA......', '1'
4 from action a
5 where a.id not in (select g.action
6 from groupscenarioaction g
7 where g.gpscenario_uuid = '1'));
0 rows created.
SQL>
现在您已经了解了更多关于哪些问题可以帮助您,如果我写的内容还不够,请考虑编辑您发布的原始问题(只需删除所有错误的内容并写一些真实的内容,我们可以使用)。
【讨论】:
感谢您写下代码。我会尽快编辑这篇文章以上是关于Oracle SQL 中的插入选择查询缺少表达式错误的主要内容,如果未能解决你的问题,请参考以下文章
带有 ORA-00936 的 SQL 查询实例:缺少表达式错误
Oracle SQL:带有 REGEXP_SUBSTR 表达式的插入查询很长(拆分字符串)