PostgreSQL实现了 execute ... using 选项将参数传递到动态SQL中,据我所知,这个功能是在8.4版本中引入的。我们正在使用Greenplum,它是从8.2版本的PostgreSQL分叉的,所以它没有这个功能。

有没有其他方法可以在Greenplum或PostgreSQL8.2中做同样的事情?

有帮助吗?

解决方案

我不能肯定地说,但有一个提示 CREATE FUNCTION 文件:

朗名 实现函数的语言的名称。可以是SQL、c、internal或用户定义的过程语言的名称。请参阅为Greenplum数据库中支持的过程语言创建语言。

反过来,引用的地方说

默认情况下,Pl/pgSQL语言安装在Greenplum数据库中。

现在 EXECUTE ... USING 是PL/pgSQL功能,所以唯一的问题是它来自哪个PostgreSQL版本。文档指向8.2-这样看起来你运气不好。

我已经联系了Greenplum支持以获得明确的答案,但从未得到答案。

至于解决缺少该构造的问题,您显然可以将所需的任何SQL字符串连接在一起并执行它。注意正确引用传入的值并避免SQL注入。

其他提示

您可以通过使用dezso提到的存储函数来使用解决方法 :

CREATE OR REPLACE FUNCTION dynamic_query (table_name TEXT) RETURNS VOID AS $$
BEGIN
    EXECUTE 'SELECT * FROM ' || table_name || ' WHERE column1 LIKE ''a_value''';
END;
$$ language plpgsql;
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top