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

时间:2016-03-09 05:10:04

标签: postgresql plpgsql

我正在尝试在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?

2 个答案:

答案 0 :(得分:0)

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
  • 在每个声明的末尾使用;

此外,如果您正在运行ad-hoc语句,则需要在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 

答案 1 :(得分:0)

实际上你的陈述不是SQL。这是PL / PGSQL声明。

很明显,当你将它作为SQL查询发送给Postgres时,它会引发异常。

如果您是从pgAdmin3执行此操作,则可以运行pl / psql脚本。用它