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;
需要向 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/SQLDECLARE
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;