Combined INSERT SELECT Oracle-Query 不起作用
Combined INSERT SELECT Oracle-Query does not work
我有以下查询,通常应该有效,但不适用于我的 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 查询应取 TABLE1 中已存在的最高 ID_NO(ID 号)并加 1 并将其写入 INSERT statement.So ID_NO 中在 table.
中迭代每个新的 INSERT
如果我在没有 INSERT 提示的情况下将 SELECT 语句写为 navicat 中的单个语句,它就可以工作。但是我想把它放在 INSERT 提示字符串中。我必须将组合查询放在一个字符串中,因为我使用 C# 代码将 oracle 查询字符串发送到数据库并且仅适用于一个字符串。这里有什么问题?我卡了几天了,看不出错误。
编辑:我自己发现了错误。我忘了将 SELECT 语句放入方括号中,即放入“()”。我编辑了我的第一个 post 的代码。现在可以了。
The SELECT
query should take the highest already existing ID_NO
(ID number) of TABLE1
and add 1
and write this in the INSERT
statement.
你似乎把这个复杂化了。我想你想要 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
扫描 table。如果您可以忍受间隙,那么使用序列会更简单。
我明白了。我忘了将 SELECT 语句设置到括号中,即设置为“()”。我编辑了我的代码。现在可以了。
我有以下查询,通常应该有效,但不适用于我的 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 查询应取 TABLE1 中已存在的最高 ID_NO(ID 号)并加 1 并将其写入 INSERT statement.So ID_NO 中在 table.
中迭代每个新的 INSERT如果我在没有 INSERT 提示的情况下将 SELECT 语句写为 navicat 中的单个语句,它就可以工作。但是我想把它放在 INSERT 提示字符串中。我必须将组合查询放在一个字符串中,因为我使用 C# 代码将 oracle 查询字符串发送到数据库并且仅适用于一个字符串。这里有什么问题?我卡了几天了,看不出错误。
编辑:我自己发现了错误。我忘了将 SELECT 语句放入方括号中,即放入“()”。我编辑了我的第一个 post 的代码。现在可以了。
The
SELECT
query should take the highest already existingID_NO
(ID number) ofTABLE1
and add1
and write this in theINSERT
statement.
你似乎把这个复杂化了。我想你想要 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
扫描 table。如果您可以忍受间隙,那么使用序列会更简单。
我明白了。我忘了将 SELECT 语句设置到括号中,即设置为“()”。我编辑了我的代码。现在可以了。