创建postgresql函数时不存在列

时间:2017-04-17 05:03:29

标签: sql postgresql

我尝试创建一个导出由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;

2 个答案:

答案 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) {}