Greenplum支持动态sql吗?
-
29-09-2020 - |
题
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;
不隶属于 dba.stackexchange