PostgreSQL中的用户定义变量

x9ybnkn6  于 5个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(101)

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

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

字符串
如何使用PostgreSQL定义用户定义变量@statement

kjthegm6

kjthegm61#

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

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

SELECT current_setting('foo.test');

字符串
关于Customized Options in the manual
PostgreSQL 9.1 or earlier you needed to declare custom_variable_classes中,你可以使用它。
但是,如果没有PL(过程语言),您就不能**EXECUTE动态SQL。您可以使用DO命令来执行ad-hoc语句(但不能从中返回数据)。或者使用CREATE FUNCTION创建一个执行动态SQL的函数(并且可以以任何可以想象的方式返回数据)。
在使用动态SQL时,一定要防止SQL注入。
相关:

mzillmmw

mzillmmw2#

例如,您可以将custom optionsmy.nummy.first.name设置为变量,如下所示。* 我的答案详细解释了如何声明用户定义的变量:

SET my.num = 2;
SET my.first.name = 'John';

字符串
或者,您可以使用set_config()设置自定义选项,如下所示:

SELECT set_config('my.num', '2', false);
SELECT set_config('my.first.name', 'John', false);


然后,您必须使用current_setting()来获取自定义选项my.nummy.first.name的值,如下所示:

postgres=# SELECT current_setting('my.num');
 current_setting
-----------------
 2
(1 row)
postgres=# SELECT current_setting('my.first.name');
 current_setting
-----------------
 John
(1 row)

的字符串
接下来,例如,您可以使用\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)

相关问题