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;

我的问题是:

  1. 如何访问变量 A 以便它可以 运行 正常?
  2. 有没有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