70

我尝试这样做,但这是一个语法错误,我做错了什么?

declare myid := insert into oameni values(default,'lol') returning id;

我的桌子:

create table oameni
(
 id   serial primary key,
 name varchar(10)
);
4

2 回答 2

119

您需要使用 RETURNING 中的 INTO 子句来设置返回到变量中的值:

DECLARE myid OAMENI.id%TYPE;

INSERT INTO oameni 
VALUES 
  (default,'lol') 
RETURNING id INTO myid;

您还需要指定变量的数据类型;我很高兴看到postgresql 支持 %TYPE 和 %ROWTYPE

于 2010-09-10T20:04:12.900 回答
6

添加到主要答案中,值得注意的是,如果您在存储过程之外执行此操作,则必须将代码包装在“DO”块中,如下所示:

DO $$ 
DECLARE
    myid mytable.id%TYPE;
BEGIN
    INSERT INTO mytable (...) 
      VALUES (...)
      RETURNING id INTO myid;
END $$
于 2021-03-08T18:53:50.707 回答