2017-04-17 89 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; 
相關問題