Обсуждение: 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