我有以下查询,正常情况下应该可以使用,但不适用于我的navicat数据库管理软件:
INSERT INTO TABLE1(ID_NO, COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5, COLUMN6, COLUMN7, COLUMN8, COLUMN9, COLUMN10, COLUMN11, DDATE_IN) VALUES(SELECT ID_NO+1 AS ID_NO FROM ((SELECT MAX( ID_NO ) as ID_NO FROM TABLE GROUP BY ID_NO ORDER BY ID_NO DESC) WHERE ROWNUM = 1), 'Value2', 'Value3', 1, 1, 1, 'Value4', 'Value5', 'Value6', 'Value7', 'Value8', 'Value9', TO_DATE('05.07.2020 10:00:00', 'DD.MM.YYYY HH24:MI:SS'))
select查询应该获取表1中已经存在的最高id号(id号),并添加1,然后将其写入insert语句中。因此,必须迭代id号,以便该表中的每个新insert。
如果我在navicat中将select语句作为单个语句编写,而不使用insert提示符,它就可以工作。但我想把它放在插入提示字符串中。我必须将组合查询放在一个字符串中,因为我使用的是一个c代码,它将oracle查询字符串发送到数据库,并且只能处理一个字符串。这里怎么了?我被困了几天,我看不出错误。
编辑:我自己发现的错误。我忘了把select语句放在括号里,即放在“()”里。我编辑了我第一篇文章的代码。现在起作用了。
2条答案
按热度按时间mbskvtky1#
这个
SELECT
查询应采用现有的最高值ID_NO
身份证号码TABLE1
并添加1
把这个写在INSERT
声明。你好像把事情搞得太复杂了。我想你想要
insert ... select
聚合查询的语法:请注意,这是一种非常低效的处理方式,因为它需要为每个
insert
. 如果你能适应间隙,那么使用序列会更简单。lh80um4z2#
我得到了它。我忘了把select语句放在括号里,即放在“()”里。我编辑了我的代码。现在起作用了。