PostgreSQL 中的用户定义变量

问题描述 投票:0回答:2

我有以下 MySQL 脚本,我想在 PostgreSQL 中实现。

 SET @statement = search_address_query;
      PREPARE dynquery FROM @statement;
      EXECUTE dynquery;
      DEALLOCATE PREPARE dynquery;

如何使用 PostgreSQL 定义用户定义的变量“@statement”。

postgresql variables dynamic-sql
2个回答
27
投票

Postgres 通常不在普通 SQL 中使用变量。但你也可以这样做:

SET foo.test = 'SELECT bar FROM baz';

SELECT current_setting('foo.test');

阅读手册中的自定义选项

PostgreSQL 9.1 或更早版本中,您需要声明

custom_variable_classes
才能使用它。

但是,如果没有 PL(过程语言),您不能

EXECUTE
动态 SQL。您可以使用
DO
命令来执行临时语句(但不能从中返回数据)。或者使用
CREATE FUNCTION
创建一个执行动态 SQL 的函数(并且可以以任何可以想象的方式返回数据)。

使用动态 SQL 时请务必防范 SQL 注入。

相关:


0
投票

例如,您可以使用 \set 将数字

2
设置为
num
,如下所示。 *我的回答解释更多:

postgres=# \set num 2
postgres=# SELECT :num;
 ?column?
----------
        2
(1 row)

并且,您可以使用

\set
将文本
John Smith
''
设置为
name
,如下所示:

postgres=# \set name 'John Smith'
postgres=# SELECT :'name';
  ?column?
------------
 John Smith
(1 row)
© www.soinside.com 2019 - 2024. All rights reserved.