Oracle SQL,变量正常SQL?

Oracle SQL, variable in normal SQL?

需要向 Oracle 发送一个 SQL 字符串,首先是“select”,然后在同一个 table 上“插入”。 db 中的代码是我无法控制的,所以必须这样。由于应用程序的结构,我无法先调用“select”,获取新 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');

你可以做到

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

(请注意,使用 max(id)+1 生成密钥在 multi-user 环境中不起作用。您确实需要使用序列)。

听起来你只是想要

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;