我需要使用select语句插入单行并返回插入到表中的值。应用程序需要保存插入值的值,以便在应用程序中进一步使用。我需要使用insert with返回选项,因为select使用最大值,因此select总是返回单列,另外,我可以添加条件从select语句返回单行。我需要避免使用plsql,并且必须在一个语句中完成。
INSERT INTO TEMPTABLE (COLID)
SELECT max( COLID ) +1 FROM APPLICATIONTABLE
WHERE ROWNUM <=1 RETURNING colid;
我得到了错误的SQL : ORA-00933: SQL命令没有正确结束,我不希望使用使用变量的声明语句。
发布于 2017-03-16 18:16:02
您的代码有两个问题:
returning
与基于select语句的insert语句一起使用。这样做是可行的:
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
向我提出了一个警告标志:通常最好使用序列而不是这种方法来生成新的键:
DECLARE
v1 APPLICATIONTABLE.colid%type;
BEGIN
INSERT INTO TEMPTABLE (COLID) VALUES (colidseq.nextval)
RETURNING colid INTO v1;
END;
https://stackoverflow.com/questions/42840590
复制相似问题