繁体   English   中英

在PostgreSQL SQL pgadmin3中使用IF Exists函数(语法错误,SQL状态:42601字符:1)

[英]Using IF Exists function in postgreSQL pgadmin3 (syntax error ,SQL state: 42601 Character: 1)

我试图在pgadmin3中执行一条SQL语句,该语句执行以下操作:

如果已经存在具有特定名称和年龄的学生,则获取student_id否则插入具有指定名称和年龄的新记录,然后获取创建的student_id

我试过这段代码:

 IF EXISTS (SELECT 1 FROM main.student WHERE studentname='hhh' and  studentage=15) 
   BEGIN
       SELECT student_id FROM main.student WHERE studentname='hhh' and   studentage=15
  END
 ELSE
   BEGIN
 INSERT INTO main.student(studentname,studentage) VALUES('hhh',15)
   END;
   END IF; 

但是我总是收到这个错误:

“ IF”处或附近的语法错误SQL状态:42601字符:1

你能告诉我我做错了吗? 另外,如何在insert语句之后获取student_id?

IF EXISTS (SELECT 1 FROM main.student WHERE studentname='hhh' and studentage=15) THEN
    SELECT student_id FROM main.student WHERE studentname='hhh' and studentage=15;
ELSE
    INSERT INTO main.student(studentname,studentage) VALUES('hhh',15);
END IF;

您需要考虑以下几点:

  • 对于IF语句,您需要使用THEN
  • 仅运行一种语法,您不需要BEGIN/END
  • 使用; 在每个语句的末尾

另外,如果您正在运行一条临时语句,则需要在DO命令中运行它

DO
$do$
IF EXISTS (SELECT 1 FROM main.student WHERE studentname='hhh' and studentage=15) THEN
    SELECT student_id FROM main.student WHERE studentname='hhh' and studentage=15;
ELSE
    INSERT INTO main.student(studentname,studentage) VALUES('hhh',15);
END IF;
END
$do$

对于问题的最后一部分,您可以返回要插入的ID

INSERT INTO main.student(studentname,studentage) VALUES('hhh',15) RETURNING student_id 

实际上,您的语句不是SQL。 它是PL / PGSQL语句。

所以很显然,当您将其作为SQL查询发送到Postgres时,它将引发异常。

如果您是从pgAdmin3执行此操作,则它具有运行pl / psql脚本的出色功能。 用它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM