是否可以使用从CTE获得的参数执行准备好的语句?
下面的示例是我的代码的简化版本,但这正是复制我遇到的问题。
以下是我在没有CTE的情况下能走多远:
BEGIN;
CREATE TEMPORARY TABLE testTable
(
col1 NUMERIC,
col2 TEXT
) ON COMMIT DROP;
INSERT INTO testTable
VALUES (1, 'foo'), (2, 'bar');
PREPARE myStatement AS
WITH cteTable AS
(
SELECT col1, col2
FROM testTable
WHERE col1 = $1
)
SELECT col2 FROM cteTable;
EXECUTE myStatement(2);
DEALLOCATE myStatement;
COMMIT;
结果如下:
二氧化碳
酒吧
现在,我要实现的是:
BEGIN;
CREATE TEMPORARY TABLE testTable
(
col1 NUMERIC,
col2 TEXT
) ON COMMIT DROP;
INSERT INTO testTable
VALUES (1, 'foo'), (2, 'bar');
PREPARE myStatement AS
WITH cteTable AS
(
SELECT col1, col2
FROM testTable
WHERE col1 = $1
)
SELECT col2 FROM cteTable;
-- Using a CTE here to get the parameters for the prepared statement
WITH parameters AS
(
SELECT 2 val
)
EXECUTE myStatement(SELECT val FROM parameters);
DEALLOCATE myStatement;
COMMIT;
我收到的错误信息是
执行时或附近出现语法错误
即使尝试在不尝试使用CTE值的情况下运行EXECUTE部分,我仍然有相同的错误消息。
尽管我做了研究,我还是没能找到其他人有同样的问题,我想我可能做错了。。如果可以的话,有人能告诉我正确的方向吗?
谢谢
最佳答案
正如Vao Tsun所评论的,这是不可能的。
我已经将准备好的语句转换为一个函数,该函数将返回一个表,然后使用一个CTE选择将我的函数与多个参数联合。
关于postgresql - CTE的Postgres EXECUTE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48775214/