Обсуждение: Suggestion for parameterized queries
Hi,
Parameterized queries (PREPARE/EXECUTE), is a great thing, but it
would even be better if the DECLARE CURSOR could use a PREPAREd
statement, to declare a "server-side" cursor with a parameterized
query, to use the benefits of DECLAREd cursors (no fetching of all the
result set on the client, use the binary mode, use the scrollable
option or the FOR UPDATE option).
Something like:
PREPARE s1 (type,..) AS SELECT ....
DECLARE c1 (value,...) CURSOR FROM s1
FETCH c1
or have a new OPEN instruction to pass parameters:
PREPARE s1 (type,..) AS SELECT ....
DECLARE c1 CURSOR FROM s1
OPEN c1 USING (value,...)
FETCH c1
That would be an incredible improvement to make PostgreSQL compete
with other databases like Informix, Oracle, Db2 UDB, SQL Server (I
wrote some drivers for these database servers).
For now we cannot use DECLARE CURSOR in our PostgreSQL driver because
of this limitation.... I could build the SQL statement with literal
values, but since you have now parametrized queries I would prefer to
use that...
Thank you!
Sebastien FLAESCH
Database driver writer at www.4js.com
Sebastien FLAESCH wrote: > Hi, > > Parameterized queries (PREPARE/EXECUTE), is a great thing, but it would > even be better if the DECLARE CURSOR could use a PREPAREd statement, to > declare a "server-side" cursor with a parameterized query, to use the > benefits of DECLAREd cursors (no fetching of all the result set on the > client, use the binary mode, use the scrollable option or the FOR UPDATE > option). > For now we cannot use DECLARE CURSOR in our PostgreSQL driver because > of this limitation.... I could build the SQL statement with literal > values, but since you have now parametrized queries I would prefer to > use that... You can define a function that returns a cursor, if that is of any use to you. -- Richard Huxton Archonet Ltd
Richard Huxton wrote: > Sebastien FLAESCH wrote: > >> Hi, >> >> Parameterized queries (PREPARE/EXECUTE), is a great thing, but it >> would even be better if the DECLARE CURSOR could use a PREPAREd >> statement, to declare a "server-side" cursor with a parameterized >> query, to use the benefits of DECLAREd cursors (no fetching of all the >> result set on the client, use the binary mode, use the scrollable >> option or the FOR UPDATE option). > > >> For now we cannot use DECLARE CURSOR in our PostgreSQL driver because >> of this limitation.... I could build the SQL statement with literal >> values, but since you have now parametrized queries I would prefer to >> use that... > > > You can define a function that returns a cursor, if that is of any use > to you. > Thanks for the idea, but actually we need that as a basic SQL feature, because we write a database driver. How to write a generic function that can execute any SELECT statement? I can imagine that one param of the function would be the SQL text, but what about passing a variable list of parameters? Seb