【发布时间】:2019-08-30 23:19:30
【问题描述】:
PostgreSql(11版)中如何使用IF语句?我尝试了原始的 IF 用法,但遇到了问题(“IF”处或附近的语法错误)。为了解决这个问题,人们建议使用'do &&',但效果不佳(未终止的美元报价开始于 SQL DO $$ BEGIN IF ......中的位置 3)。这是我的 SQL 代码:
DO $$
BEGIN
IF (NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'categories')) THEN
CREATE TABLE IF NOT EXISTS categories
(
id SERIAL NOT NULL,
name character varying(40),
CONSTRAINT categories_pkey PRIMARY KEY (id)
);
INSERT INTO categories (name) VALUES ('Games');
INSERT INTO categories (name) VALUES ('Multimedia');
INSERT INTO categories (name) VALUES ('Productivity');
INSERT INTO categories (name) VALUES ('Tools');
INSERT INTO categories (name) VALUES ('Health');
INSERT INTO categories (name) VALUES ('Lifestyle');
INSERT INTO categories (name) VALUES ('Other');
END IF;
END
$$;
如果表不存在,我只需要创建表并插入一些初始化数据。
【问题讨论】:
-
当你的create table语句还包含
if not exists时,为什么你有if ( not exists (select ...?您实际上可以完全删除整个do块。 -
为我工作:dbfiddle.uk/… 您使用哪个 SQL 工具来运行该语句?也许您的工具根本无法理解美元报价。
标签: sql postgresql