PostgreSQL 11.2中表空值判断分支导入逻辑的语法求助
修正PostgreSQL PL/pgSQL条件插入代码
原代码存在的问题
- 未将查询结果赋值给变量,直接使用表别名
isTableEmpty作为判断条件,不符合PL/pgSQL语法规范 SELECT count(*) ...语句末尾缺少分号,导致语法错误- 逻辑判断颠倒:需求是table_x为空时插入table_x,原代码中当table_x有数据时才插入table_x,与需求不符
- 使用
count(*)判断表是否为空效率较低,推荐用EXISTS(只需检测到一条数据就停止查询)
修正后的代码
写法一:使用变量存储判断结果
DO $$ DECLARE table_x_empty BOOLEAN; BEGIN -- 判断table_x是否为空 SELECT NOT EXISTS(SELECT 1 FROM table_x LIMIT 1) INTO table_x_empty; IF table_x_empty THEN INSERT INTO table_x SELECT * FROM table_b; ELSE INSERT INTO table_y SELECT * FROM table_b; END IF; END $$;
写法二:直接在IF条件中使用EXISTS(更简洁)
DO $$ BEGIN IF NOT EXISTS(SELECT 1 FROM table_x LIMIT 1) THEN INSERT INTO table_x SELECT * FROM table_b; ELSE INSERT INTO table_y SELECT * FROM table_b; END IF; END $$;
说明
NOT EXISTS(SELECT 1 FROM table_x LIMIT 1)用于高效判断table_x是否为空:如果表中没有数据,该表达式返回TRUE- 两种写法都兼容PostgreSQL 11.2版本,满足需求逻辑
内容的提问来源于stack exchange,提问作者Utsuk
相关产品推荐
相关产品推荐

