你能用“?”对于postgresQL中的参数?

时间:2013-04-10 02:40:33

标签: sql postgresql

这应该是愚蠢的回答,但对于我的生活,我无法找到一个明确的答案。

你能用“?”在postgres中,就像在其他数据库引擎中一样?

例如:

SELECT * FROM MyTable WHERE MyField = ?

我知道我可以使用$ n语法,例如psql的工作原理:

CREATE TABLE dummy (id SERIAL PRIMARY KEY, value INT);
PREPARE bar(int) AS INSERT INTO dummy (value) VALUES ($1);
EXECUTE bar(10);
SELECT * FROM DUMMY;

但是如果我尝试使用“?”来准备声明,例如

PREPARE bar(int) AS INSERT INTO dummy (value) VALUES (?);

我明白了:

  

错误:语法错误在或附近“)”   第1行:PREPARE bar(int)AS INSERT INTO dummy(value)VALUES(?);

...然而,在各个地方,我读到“postgres支持?语法”。

这里发生了什么? postgres支持使用?而不是1美元,2美元等 如果是这样,你如何使用它?

具体来说,这让我的生活变得痛苦,将一堆现有的sql server查询移植到postgres,如果我可以避免必须重写所有where条件所有sql语句那么非常,非常好。

1 个答案:

答案 0 :(得分:3)

PostgreSQL中的SQL级PREPARE不支持?占位符,它使用$1 ... $n样式。

大多数客户端库支持参数化查询中该语言使用的标准占位符,例如PgJDBC使用?占位符。

如果您通过nPgSQL,psqlODBC,PgJDBC,psycopg2等客户端库发送查询,那么您应该能够使用该语言和客户端的常用占位符。