代码之家  ›  专栏  ›  技术社区  ›  brewphone

Oracle SQL,普通SQL中的变量?

  •  0
  • brewphone  · 技术社区  · 3 年前

    需要向Oracle发送一个SQL字符串,首先在同一个表上“选择”,然后“插入”。db中的代码超出了我的控制,所以我必须这样做。由于应用程序的结构,我无法先调用“选择”,获取新id,然后执行插入,它们必须位于同一个SQL字符串中。想做如下事情,但不知道如何使用,甚至Oracle也不知道如何使用这样的变量。检查过了吗 this link 但情况不同。

    var newid number;
    SELECT max(id) + 1 into :newid FROM usr;
    INSERT INTO usr(id, name) VALUES (:newid, 'new-name');
    
    2 回复  |  直到 3 年前
        1
  •  3
  •   Justin Cave    3 年前

    (注意,使用 max(id)+1 生成密钥在多用户环境中不起作用。你真的想用一个序列)。

    听起来你只是想

    INSERT INTO usr(id, name)
      SELECT max(id) + 1, 'new-name'
        FROM usr;
    

    您可能还可以向数据库传递一个匿名PL/SQL块,尽管这样会降低效率。如果前端只希望得到SQL,那么它可能不支持传入PL/SQL。

    DECLARE
      l_newID usr.id%type;
    BEGIN
      SELECT max(id) + 1
        INTO l_newID
        FROM usr;
    
      INSERT INTO usr( id, name )
        VALUES( l_newID, 'new-name' );
    END;
    
        2
  •  0
  •   Luc M    3 年前

    你能行

    INSERT INTO usr(id, name) SELECT max(id) + 1, 'new-name' FROM
    usr;