Обсуждение: Executing dynamic queries without functions / procedures
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.
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
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