Oracle insert into使用select添加第一行和返回列,而不使用pl/sql存储过程

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

我需要使用select语句插入单行,并返回插入到表中的值。应用程序需要保留插入值的值,以便在应用程序中进一步使用。我需要使用insert with returning选项,因为select使用max,因此select将始终返回单列,此外,我可以添加条件以从select语句返回单行。 我需要避免使用plsql,并且必须在单个语句中完成

    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!