在PL \ pgSQL中使用带有子查询的COPY命令

时间:2016-05-26 11:24:40

标签: postgresql plpgsql

有一个功能的例子我试图创建:

CREATE OR REPLACE FUNCTION exchange_to_csv()
  RETURNS integer AS $$
    DECLARE
    xseq integer;
    BEGIN
      SELECT max(events_stage.seq) FROM events_stage INTO xseq;
      IF xseq is not NULL THEN
        EXECUTE 'COPY (SELECT * from events_stage WHERE events_stage.seq <= $1) TO ''/tmp/test.csv'' WITH CSV' USING xseq;
        DELETE FROM event_stage WHERE event_stage.seq <= xseq;
      END IF;
      RETURN xseq;
    END;
$$ LANGUAGE plpgsql;

执行此代码我收到以下错误:

[42P02] ERROR: there is no parameter $1

据我所知,子查询中不存在$ 1。有没有办法,我怎么能把这个参数传给那里?

1 个答案:

答案 0 :(得分:0)

$1是函数中的第一个参数。您的函数exchange_to_csv()没有参数,因此无法识别$1

如果要传递参数,则需要将功能更改为:

exchange_to_csv(x Type)

类型可以是IntegerText等... 然后,您可以在功能正文中按名称xx

访问$1