基于标志在PL/pgsql中构建不同列的查询
我需要在PL/pgSQL中运行以下语句基于标志在PL/pgsql中构建不同列的查询,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我需要在PL/pgSQL中运行以下语句 if file_record.has_recieved_time_column then EXECUTE FORMAT('COPY mytemp (columnA, columnB, columnC) FROM %L DELIMITER '','' CSV HEADER;', file_re
if file_record.has_recieved_time_column then
EXECUTE FORMAT('COPY mytemp (columnA, columnB, columnC)
FROM %L
DELIMITER '',''
CSV HEADER;', file_record.file_path);
elseif file_record.has_header then
-- dont load columnC
EXECUTE FORMAT('COPY mytemp (columnA, columnB)
FROM %L
DELIMITER '',''
CSV HEADER;', file_record.file_path);
else
-- dont load columnC and the file has no header
EXECUTE FORMAT('COPY mytemp (columnA, columnB)
FROM %L
DELIMITER '',''
CSV;', file_record.file_path);
end if;
如何避免在这段代码中重复自己的操作?尝试使用默认值创建变量
columnA、columnB
,然后在需要时使用columnC
继续,例如
cols := 'columnA, columnB';
IF file_record.has_recieved_time_column THEN
cols = cols || ',columnC';
ELSEIF file_record.has_header THEN
cols = cols || ',columnX';
ELSE
....
END IF;
EXECUTE FORMAT('COPY mytemp (%L) FROM %L DELIMITER '',''CSV HEADER;', cols, file_record.file_path);
您有三个不同的
COPY
语句。你重复是什么意思?函数是否继续使用多个IF/ELSE?理想情况下,我希望通过某种方式定义cols=(colA,colB)来建立查询
然后执行如果file_record.has_received_time_column:cols+=colC
然后将cols
作为参数传递到COPY
语句中,并对头执行类似的操作这正是我要寻找的,是否有办法以同样的方式解决头问题,我可以设置一个空字符串的header变量并用header替换它,然后像现在一样使用%L吗?@sev绝对可以。只需将COPY
字符串中的HEADER
替换为%L
,并在FORMAT
命令末尾添加一个额外变量。@sev类似于EXECUTE FORMAT('COPY mytemp(%L)FROM%L DELIMITER','CSV%L;',cols,file\u record.file\u path,HEADER\u variable)代码>