On Dec 11, 2007, at 11:15 PM, Paul Lambert wrote:

I have a function which uses execute to populate the value of a variable based on a defined select construct.

The relevant part of the code looks like thus:
   EXECUTE curr_query INTO curr_amount;
   RAISE NOTICE '%',curr_amount;
   IF NOT FOUND THEN
      curr_amount=0;
   END IF;
   RAISE NOTICE '%',curr_amount;

I've added the if found to trap if nothing is returned by the execute so that the value gets set to a default 0 rather than null.

When I call the function, the first raise notice gives me a value that is correct based on the select it would be performing, but the second raise notice gives me a 0, which suggests to me that although the execute has populated the curr_amount field with something, the IF NOT FOUND is always firing.

Am I misunderstanding what the FOUND variable can be used for - i.e. is it not compatible with/not set by the EXECUTE command and should therefore I just be using a test of IF curr_amount IS NOT NULL?

If the result of your execute doesn't assign any value(s) to curr_amount it sets it to NULL. With that in mind,

IF curr_amount IS NULL THEN
        curr_amount := 0;
END IF;

should do.

Erik Jones

Software Developer | Emma®
[EMAIL PROTECTED]
800.595.4401 or 615.292.5888
615.292.0777 (fax)

Emma helps organizations everywhere communicate & market in style.
Visit us online at http://www.myemma.com



---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to