2017-04-17 91 views
0

我尝试创建一个动态函数,该函数导出由for控制的数据特定的id,但是当我运行该函数时,它向我显示没有列的错误i, 我想来连接变量i与输出文件创建postgresql函数时不存在列

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; 

回答

2

COPY不支持查询参数的名称,所以你不能用COPY使用PL/PGSQL变量。
您应该使用带有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'); 
+0

你能告诉我如何连接我的查询与执行?因为当我这样做给我错误'执行格式('复制(%L)到%L与CSV头“,选择nombre,dni,edad从测试其中id =我,'C:\ Users \ Usuario \ Documents \ user '+ i +'。csv');' – DarkFenix

+0

我已经更新了我的答案,请检查。 –

0

你可以使用与EXECUTE而不是动态SQL,这样

statement :='COPY (select nombre,dni,edad from test where id=' || i || ') to ''C:\Users\Usuario\Documents\user' || i ||'.csv'''; 
EXECUTE statement; 
相关问题