是否可以使用从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/

10-16 00:23