组合插入选择oracle查询不起作用

x6yk4ghg  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(293)

我有以下查询,正常情况下应该可以使用,但不适用于我的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语句放在括号里,即放在“()”里。我编辑了我第一篇文章的代码。现在起作用了。

mbskvtky

mbskvtky1#

这个 SELECT 查询应采用现有的最高值 ID_NO 身份证号码 TABLE1 并添加 1 把这个写在 INSERT 声明。
你好像把事情搞得太复杂了。我想你想要 insert ... select 聚合查询的语法:

INSERT INTO TABLE1(
    ID_NO, 
    COLUMN1, 
    COLUMN2, 
    COLUMN3, 
    COLUMN4, 
    COLUMN5, 
    COLUMN6, 
    COLUMN7, 
    COLUMN8, 
    COLUMN9, 
    COLUMN10, 
    COLUMN11, 
    DDATE_IN
) 
SELECT 
    COALESCE(MAXID_NO), 0) + 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')
FROM TABLE1

请注意,这是一种非常低效的处理方式,因为它需要为每个 insert . 如果你能适应间隙,那么使用序列会更简单。

lh80um4z

lh80um4z2#

我得到了它。我忘了把select语句放在括号里,即放在“()”里。我编辑了我的代码。现在起作用了。

相关问题