在PostgreSQL

时间:2018-03-13 03:51:00

标签: mysql postgresql database-migration concat

如果这个问题如此简单,我很抱歉。我有一些可以在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有什么好处?
  3. 谢谢专家!

1 个答案:

答案 0 :(得分:1)

您可以在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