我想在子查询中使用预准备语句。 简单的例子:
PREPARE get_series(int) AS SELECT * FROM generate_series(1,$1);
SELECT * FROM EXECUTE get_series(13);
但是我收到了语法错误。
作为替代方案,我可以使用存储过程,但整个想法是保留源代码中的所有内容,并且预准备语句允许调用参数化查询。它类似于UDP,但在源代码方面。
注意:我使用的是Postgres 10.2
答案 0 :(得分:0)
EXECUTE
是一个SQL语句,而不是可以在FROM
子句中使用的表达式。
试试这个:
EXECUTE get_series(13);
您不能在子查询中使用EXECUTE
- 只允许SELECT
。
我会说你不应该为此准备好陈述;也许你需要一套回归功能。
答案 1 :(得分:0)
实际上,我可以使用CTE创建复杂的查询。 CTE将使其更易于阅读,并通过准备声明进行参数化。最后,查询仍然保留在源代码中,在源代码中,我可以提取可重用的部分。