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