【问题标题】:Passing a path as parameter to function将路径作为参数传递给函数
【发布时间】:2021-12-02 21:17:54
【问题描述】:

我有一个函数,其中我将path 作为参数传递给文件。在函数内,我想COPY位于path的数据

CREATE OR REPLACE FUNCTION load(path varchar)
    RETURNS void
    LANGUAGE plpgsql
  AS
$$
BEGIN
    COPY foo FROM path
    WITH DELIMITER ';' 
    CSV HEADER;

    ...

end;
$$

这给出了一个Syntax Error,指向path。如果我将path 硬编码为C:\Users....,它就可以工作。 这是为什么呢?

【问题讨论】:

    标签: database postgresql plpgsql


    【解决方案1】:

    copy 不适用于变量。塑造并执行动态 SQL。这是一个插图-您的示例已修改。为了清楚起见,我使用dollar quoting

    CREATE OR REPLACE FUNCTION load(path text) RETURNS void LANGUAGE plpgsql AS
    $$
    begin
     execute replace(
     $dynsql$
        COPY foo FROM '__PATH__'
        WITH DELIMITER ';' 
        CSV HEADER;
     $dynsql$,
     '__PATH__', path);
    
        ...
    
    end;
    $$
    

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 2013-01-25
      • 2014-08-12
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多