【发布时间】:2021-09-08 15:51:04
【问题描述】:
我正在 postgresql 中编写一个脚本来创建动态临时表,包括表的名称和条件 where a.state =。下面的查询实现了这个目标,因为它替换了查询中声明的变量 level 的字符串 ('ACTIVE'),该变量用 begin 初始化。
DO $$
declare
level varchar := 'ACTIVE';
BEGIN
execute('drop table if exists con_users_'|| level ||
'; create temp table con_users_'|| level ||' AS (
SELECT * FROM usuario a WHERE a.state = '''|| level ||''')');
END$$
但是,当我想添加 for 循环来遍历 array ['ACTIVE', 'OFF'] 以便在变量级别独立执行这两个条件时,就会出现问题。向前推进:
DO $$
declare
i varchar[];
level varchar[] := array['ACTIVE','OFF'];
begin
for i in level
loop
execute('drop table if exists con_users_'|| level ||
'; create temp table con_users_'|| level ||' AS (
SELECT * FROM users a WHERE a.state = '''|| level ||''')');
end loop;
END$$
错误:“级别”或附近的语法错误第 8 行:for i 在级别 ^ SQL 状态:42601 字符:230
我的目标是通过执行脚本,根据array ['ACTIVE', 'OFF'] 的列表创建两个具有名称和条件的临时表。我需要这个代码来开发一个更复杂的数据库,但如果它与这个示例库一起工作就足够了
CREATE TABLE IF NOT EXISTS users
(
users_id serial primary key,
users varchar(50),
state varchar(7)
);
INSERT INTO users(users_id, users, state)
VALUES (1, 'Peter', 'ACTIVE'),
(2, 'Gerard', 'OFF'),
(3, 'Juna', 'ACTIVE');
【问题讨论】:
标签: sql arrays database postgresql plpgsql