Oracle insert into使用select添加第一行和返回列,而不使用pl/sql存储过程
我需要使用select语句插入单行,并返回插入到表中的值。应用程序需要保留插入值的值,以便在应用程序中进一步使用。我需要使用insert with returning选项,因为select使用max,因此select将始终返回单列,此外,我可以添加条件以从select语句返回单行。 我需要避免使用plsql,并且必须在单个语句中完成Oracle insert into使用select添加第一行和返回列,而不使用pl/sql存储过程,oracle,Oracle,我需要使用select语句插入单行,并返回插入到表中的值。应用程序需要保留插入值的值,以便在应用程序中进一步使用。我需要使用insert with returning选项,因为select使用max,因此select将始终返回单列,此外,我可以添加条件以从select语句返回单行。 我需要避免使用plsql,并且必须在单个语句中完成 INSERT INTO TEMPTABLE (COLID) SELECT max( COLID ) +1 FROM APPLICATIONTA
INSERT INTO TEMPTABLE (COLID)
SELECT max( COLID ) +1 FROM APPLICATIONTABLE
WHERE ROWNUM <=1 RETURNING colid;
INSERT-INTO-tentable(COLID)
从APPLICATIONTABLE中选择最大(COLID)+1
其中ROWNUM代码有两个问题:
必须将值返回到某个对象中—变量或参数
不能对基于select语句的insert语句使用returning
这将有助于:
DECLARE
v1 APPLICATIONTABLE.colid%type;
v2 TEMPTABLE.columnid%type;
BEGIN
SELECT max( COLID ) +1
INTO v1
FROM APPLICATIONTABLE;
INSERT INTO TEMPTABLE (COLID) VALUES (v1)
RETURNING columnid INTO v2;
END;
或者,如果(我猜)您的意思是columnid
是colid
,那么:
DECLARE
v1 APPLICATIONTABLE.colid%type;
BEGIN
SELECT max( COLID ) +1
INTO v1
FROM APPLICATIONTABLE;
INSERT INTO TEMPTABLE (COLID) VALUES (v1);
END;
顺便说一下,max(COLID)+1
向我提出了一个警告标志:通常最好使用a而不是此方法来生成新密钥:
DECLARE
v1 APPLICATIONTABLE.colid%type;
BEGIN
INSERT INTO TEMPTABLE (COLID) VALUES (colidseq.nextval)
RETURNING colid INTO v1;
END;
不可能:(a)不能将returning
子句与insert…一起使用,只能使用insert…值进行选择;(b) 您必须声明一个变量才能将值返回到-将columnid返回到var
。谢谢@TonyAndrews,declare col Begin insertstatmenet with select returning cols into col end,这会解决问题吗?我无法理解您的评论(a)我会尝试回答……谢谢您,先生,我是说“科利德”,对不起,我打错了。如果我用java来执行我想实现的目标,那会是原子操作吗?对不起,我不懂java!