[英]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.