PREPARE stmt 作为 PostgreSQL 中 Concat 的结果
PREPARE stmt AS result of Concat in PostgreSQL
如果这个问题这么简单,我很抱歉。我有一些查询可以在 MySQL 存储过程中正常 运行。但现在我正在将它迁移到 PostgreSQL,该查询是来自另一个查询的 Concat 的结果。查询就像这样:
DECLARE
A TEXT;
BEGIN
A = concate(sql); /*in MySQL I just use SET A = CONCATE(sql)*/
PREPARE stmt AS A; /* in MySQL normally run with PREPARE stmt FROM A;*/
EXECUTE stmt;
END
但我总是得到一个错误:
ERROR: syntax error at or near "A"
LINE 85: PREPARE stmt AS A;
我的问题是:
- 如何访问变量
A
以便它可以 运行 正常?
- 有没有
PREPARE
,我们运行查询的结果有什么不同吗?如果使用PREPARE
有什么好处?
感谢专家!
您可以在 PL/pgSQL 中创建和使用准备好的语句,但请记住 PL/pgSQL 的 EXECUTE
不同于 SQL 语句 EXECUTE
.
所以如果你想在PL/pgSQL中执行一个准备好的语句,你将不得不使用动态SQL来避免混淆PL/pgSQL的EXECUTE
和SQL 同名语句。
DO $$BEGIN PREPARE x AS SELECT 42; END;$$;
EXECUTE x;
?column?
----------
42
(1 row)
DO
$$DECLARE a integer;
BEGIN
EXECUTE 'EXECUTE x' INTO a;
RAISE NOTICE 'a = %', a;
END;$$;
NOTICE: a = 42
如果这个问题这么简单,我很抱歉。我有一些查询可以在 MySQL 存储过程中正常 运行。但现在我正在将它迁移到 PostgreSQL,该查询是来自另一个查询的 Concat 的结果。查询就像这样:
DECLARE
A TEXT;
BEGIN
A = concate(sql); /*in MySQL I just use SET A = CONCATE(sql)*/
PREPARE stmt AS A; /* in MySQL normally run with PREPARE stmt FROM A;*/
EXECUTE stmt;
END
但我总是得到一个错误:
ERROR: syntax error at or near "A"
LINE 85: PREPARE stmt AS A;
我的问题是:
- 如何访问变量
A
以便它可以 运行 正常? - 有没有
PREPARE
,我们运行查询的结果有什么不同吗?如果使用PREPARE
有什么好处?
感谢专家!
您可以在 PL/pgSQL 中创建和使用准备好的语句,但请记住 PL/pgSQL 的 EXECUTE
不同于 SQL 语句 EXECUTE
.
所以如果你想在PL/pgSQL中执行一个准备好的语句,你将不得不使用动态SQL来避免混淆PL/pgSQL的EXECUTE
和SQL 同名语句。
DO $$BEGIN PREPARE x AS SELECT 42; END;$$;
EXECUTE x;
?column?
----------
42
(1 row)
DO
$$DECLARE a integer;
BEGIN
EXECUTE 'EXECUTE x' INTO a;
RAISE NOTICE 'a = %', a;
END;$$;
NOTICE: a = 42