Обсуждение: Executing dynamic queries without functions / procedures

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

Executing dynamic queries without functions / procedures

От
Nicholas Bott
Дата:
Is it possible to execute a dynamic query similarly to MS SQL, like so:
IF EXISTS(SELECT * FROM Table WHERE Condition)
DO SOMETHING

I would like to use the PL language in conjunction with conditional statements, outside of a procedure or function.  This doesn't seem to be possible from what I've read so far and I wanted to confirm.

Also, if it's not natively possible - is there some kind of hack?  For example, creating temporary procedures to establish the same result, then removing them periodically?

Thanks much.
--
Nicholas Bott

Re: Executing dynamic queries without functions / procedures

От
Tom Lane
Дата:
Nicholas Bott <zordiac@zordiac.com> writes:
> I would like to use the PL language in conjunction with conditional
> statements, outside of a procedure or function.  This doesn't seem to be
> possible from what I've read so far and I wanted to confirm.

Correct.

> Also, if it's not natively possible - is there some kind of hack?  For
> example, creating temporary procedures to establish the same result,
> then removing them periodically?

That's basically what you've got to do.  There've been discussions on
and off about providing a direct command to execute an anonymous,
transient PL function definition, along the lines of

    PERFORM 'begin
        ... blah blah ...
        end'
    LANGUAGE plpgsql;

but no one's really put forward a complete plan to deal with this
(what about arguments and a return value?).

Note that there is approximately 0 interest in promoting any one
PL to the exclusion of others, so a command syntax that presumes
which PL is to be executed isn't going to happen any time soon.

            regards, tom lane