使用RETURNING子句进行变量赋值

Omu*_*Omu 47 sql postgresql sql-returning

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

declare myid := insert into oameni values(default,'lol') returning id;
Run Code Online (Sandbox Code Playgroud)

我的桌子:

create table oameni
(
id serial primary key,
name varhcar(10)
);
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 77

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

DECLARE myid OAMENI.id%TYPE;

INSERT INTO oameni 
VALUES 
  (default,'lol') 
RETURNING id INTO myid;
Run Code Online (Sandbox Code Playgroud)

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

  • 你是混淆程序代码w/SQL.声明变量,游标,循环等都是程序性的,必须在函数中或在9.0中使用DO匿名块. (4认同)
  • @Omu:你是如何尝试运行这个的?什么版本的 PostgreSQL? (3认同)
  • 我仍然遇到语法错误,这仅在plpgsql函数内部可用,还是在常规posgresql中可用? (2认同)

Qwe*_*tie 15

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

DO $$ 
DECLARE
    myid mytable.id%TYPE;
BEGIN
    INSERT INTO mytable (...) 
      VALUES (...)
      RETURNING id INTO myid;
END $$
Run Code Online (Sandbox Code Playgroud)