我有下面的MySQL脚本,我想在PostgreSQL中实现。
SET @statement = search_address_query; PREPARE dynquery FROM @statement; EXECUTE dynquery; DEALLOCATE PREPARE dynquery;
字符串如何使用PostgreSQL定义用户定义变量@statement?
@statement
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注入。相关:
custom_variable_classes
EXECUTE
DO
CREATE FUNCTION
mzillmmw2#
例如,您可以将custom optionsmy.num和my.first.name设置为变量,如下所示。* 我的答案详细解释了如何声明用户定义的变量:
my.num
my.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.num和my.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,如下所示:
2
num
postgres=# \set num 2 postgres=# SELECT :num; ?column? ---------- 2 (1 row)
型并且,您可以使用\set将文本John Smith与''设置为name,如下所示:
\set
John Smith
''
name
postgres=# \set name 'John Smith' postgres=# SELECT :'name'; ?column? ------------ John Smith (1 row)
型
2条答案
按热度按时间kjthegm61#
Postgres通常不会在普通SQL中使用变量。但你也可以这样做:
字符串
关于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注入。
相关:
mzillmmw2#
例如,您可以将custom options
my.num
和my.first.name
设置为变量,如下所示。* 我的答案详细解释了如何声明用户定义的变量:字符串
或者,您可以使用set_config()设置自定义选项,如下所示:
型
然后,您必须使用current_setting()来获取自定义选项
my.num
和my.first.name
的值,如下所示:的字符串
接下来,例如,您可以使用\set将数字
2
设置为num
,如下所示:型
并且,您可以使用
\set
将文本John Smith
与''
设置为name
,如下所示:型