是否可以使用您从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;
结果如下:
COL2
巴
现在,这就是我想要实现的目标:
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;
我遇到的错误消息是
EXECUTE或其附近的语法错误
即使尝试在不尝试使用CTE值的情况下运行EXECUTE部分,我仍然会收到相同的错误消息。
尽管我没有研究过,但我还没有找到其他人有同样的问题,我想我可能做错了。如果有的话,有人可以指出我正确的方向吗?
由于