我尝试创建一个导出由for控制的数据特定ID的动态函数,但是当我运行该函数时,它向我显示没有列i
的错误,
我想将变量i与输出文件的名称连接起来
CREATE OR REPLACE FUNCTION mifuncion() RETURNS void AS $$
BEGIN
FOR i IN 1..5 LOOP
copy (select nombre,dni,edad from test where id=i) TO 'C:\Users\Usuario\Documents\user'+i+'.csv' WITH CSV HEADER;
END LOOP;
END;
$$ LANGUAGE plpgsql;
答案 0 :(得分:2)
COPY不支持查询参数,因此您不能将PL / PGSQL变量与COPY一起使用。
您应该使用带有EXECUTE的动态SQL。您可以声明变量来存储查询语句和文件路径,然后像这样执行它
EXECUTE FORMAT('COPY (%s) TO %L WITH CSV HEADER', your_query, file_path);
OR
EXECUTE FORMAT('COPY (%s) TO %L WITH CSV HEADER', 'SELECT nombre, dni, edad FROM test WHERE id = ' || i, 'C:\Users\Usuario\Documents\user' || i || '.csv');
答案 1 :(得分:0)
您可以使用带有EXECUTE的动态SQL,就像这样
class ConstructorParams
{
public int a {get;set;}
}
...
public Base( ConstructorParams p) {...}
...
public Sub(ConstructorParams p) : Base(p) {}