【问题标题】:Using IF Exists function in postgreSQL pgadmin3 (syntax error ,SQL state: 42601 Character: 1)在 postgreSQL pgadmin3 中使用 IF Exists 函数(语法错误,SQL 状态:42601 字符:1)
【发布时间】:2016-06-23 08:13:51
【问题描述】:

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

你能告诉我我做错了什么吗?另外如何在插入语句之后获取 student_id?

【问题讨论】:

标签: postgresql plpgsql


【解决方案1】:
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 

【讨论】:

  • 嗨@sqluser,我已经试过你的代码,但它仍然给出同样的错误
【解决方案2】:

其实你的语句不是 SQL。是PL/PGSQL语句。

显然,当您将其作为 SQL 查询发送到 Postgres 时,它会抛出异常。

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

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多