Обсуждение: [WISHLIST] EXECUTE SPRINTF

Поиск
Список
Период
Сортировка

[WISHLIST] EXECUTE SPRINTF

От
Vincenzo Romano
Дата:
Hi all.
I'd like to add an item to the PG wishlist (provided that one exists).
In PL/PgSQL function bodies I'm using very often a pattern like this:

EXECUTE SPRINTF( '...',... );

Where SPRINFT comes from here:
http://wiki.postgresql.org/wiki/Sprintf

It's by far more powerful, easy and effective than the standard
"string concatenation" mechanism available for the plain EXECUTE.
It's a different approach than the EXECUTE ... USING which has it's
own rules and limitations (see chapter 38.5.4 for v8.4.4).
The proposed approach doesn't know anything about symbols or other PL/PGSQL
related syntax and can be used to build very complex (or otherwise
impossible) dynamic SQL.

I'd like to either see the SPRINTF function embedded either into the
language, possibly with really variadic argument list (like stdarg.h
in C) or into the EXECUTE itself with something like "EXECUTE <a
string> SPRINTF <argument list>".

Does this make any sense to you all?

--
Vincenzo Romano
NotOrAnd Information Technologies
NON QVIETIS MARIBVS NAVTA PERITVS

Re: [WISHLIST] EXECUTE SPRINTF

От
Pavel Stehule
Дата:
2010/7/16 Vincenzo Romano <vincenzo.romano@notorand.it>:
> Hi all.
> I'd like to add an item to the PG wishlist (provided that one exists).
> In PL/PgSQL function bodies I'm using very often a pattern like this:
>
> EXECUTE SPRINTF( '...',... );
>
> Where SPRINFT comes from here:
> http://wiki.postgresql.org/wiki/Sprintf
>
> It's by far more powerful, easy and effective than the standard
> "string concatenation" mechanism available for the plain EXECUTE.
> It's a different approach than the EXECUTE ... USING which has it's
> own rules and limitations (see chapter 38.5.4 for v8.4.4).
> The proposed approach doesn't know anything about symbols or other PL/PGSQL
> related syntax and can be used to build very complex (or otherwise
> impossible) dynamic SQL.
>
> I'd like to either see the SPRINTF function embedded either into the
> language, possibly with really variadic argument list (like stdarg.h
> in C) or into the EXECUTE itself with something like "EXECUTE <a
> string> SPRINTF <argument list>".
>
> Does this make any sense to you all?

Current commitfest has a patch for functions format (in core) and
sprintf (in contrib). So in next version you will can do some like

EXECUTE format('INSERT INTO % (a,b) VALUES($1,$2)', quote_ident(tab))
USING val1, val2;

Regards

Pavel Stehule


>
> --
> Vincenzo Romano
> NotOrAnd Information Technologies
> NON QVIETIS MARIBVS NAVTA PERITVS
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>