【问题标题】:passing function parameters to dynamic query string将函数参数传递给动态查询字符串
【发布时间】:2019-08-22 20:31:41
【问题描述】:

我正在使用 PostGreSQL 11.4,刚刚开始使用动态查询,但我遗漏了一些东西。我想在查询中使用函数参数,但我做错了。

这就是我所拥有的:

create or replace function media_query.my_test(p_from_timestamp timestamptz) RETURNS TABLE (moshe timestamptz) as
$aa$
BEGIN
    RETURN QUERY EXECUTE 'select p_from_timestamp as moshe';
END $aa$ LANGUAGE plpgsql;

当我执行 select * from media_query.my_test(now()); 时,我收到错误 column "p_from_timestamp" does not exist

所以它不是一个列它是一个变量......我如何将它视为一个变量?

我是否需要将变量转换为字符串变量并将其与选择联系起来?查询字符串本身无法以某种方式解析变量?

谢谢

【问题讨论】:

    标签: postgresql plpgsql dynamicquery


    【解决方案1】:

    最好是作为参数使用,这样就不用乱转值了,也不用担心SQL注入:

    CREATE FUNCTION media_query.my_test(p_from_timestamp timestamptz)
       RETURNS TABLE (moshe timestamptz)
       IMMUTABLE AS
    $aa$
    BEGIN
        RETURN QUERY EXECUTE 'select $1' USING p_from_timestamp;
    END;$aa$
    LANGUAGE plpgsql;
    

    如果您的目标是从文字构造查询字符串,请执行以下操作:

    CREATE FUNCTION media_query.my_test(p_from_timestamp timestamptz)
       RETURNS TABLE (moshe timestamptz)
       IMMUTABLE AS
    $aa$
    BEGIN
        RETURN QUERY EXECUTE format('select %L', p_from_timestamp);
    END;$aa$
    LANGUAGE plpgsql;
    

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 2011-05-12
      • 2014-11-02
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      相关资源
      最近更新 更多