我有以下的MySQL脚本,希望在PostgreSQL中实现它。
SET @statement = search_address_query;
PREPARE dynquery FROM @statement;
EXECUTE dynquery;
DEALLOCATE PREPARE dynquery;
如何在PostgreSQL中定义名为"@statement"的用户定义变量。
我有以下的MySQL脚本,希望在PostgreSQL中实现它。
SET @statement = search_address_query;
PREPARE dynquery FROM @statement;
EXECUTE dynquery;
DEALLOCATE PREPARE dynquery;
如何在PostgreSQL中定义名为"@statement"的用户定义变量。
Postgres通常不在普通SQL中使用变量。但是您也可以这样做:
SET foo.test = 'SELECT bar FROM baz';
SELECT current_setting('foo.test');
阅读有关手册中的自定义选项的内容。
在PostgreSQL 9.1或更早版本中,您需要先声明custom_variable_classes
才能使用它。
但是,您不能执行动态SQLEXECUTE
而不使用PL(过程化语言)。您可以使用DO
命令执行即席语句(但无法从中返回数据)。或使用CREATE FUNCTION
创建一个执行动态SQL的函数(并且可以以任何可想象的方式返回数据)。
使用动态SQL时一定要注意防止SQL注入。
相关:
postgresql.conf
中的设置是为每个连接预设的。 SET
的效果仅在当前会话期间可见,并且仅在同一会话中可见。SET LOCAL
仅用于事务。还有更多设置选项的方法:https://dev59.com/h2ox5IYBdhLWcg3wpV3F#9067777,https://dev59.com/tl0a5IYBdhLWcg3wkpas#30179814 - Erwin Brandstetter
EXECUTE search_address_query;
吗? - Ihor Romanchenko