Re: Function result using execute
От | Erik Jones |
---|---|
Тема | Re: Function result using execute |
Дата | |
Msg-id | C85DB7B4-6E20-43A2-A8F6-D44D4C6726FF@myemma.com обсуждение исходный текст |
Ответ на | Function result using execute (Paul Lambert <paul.lambert@reynolds.com.au>) |
Список | pgsql-sql |
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 THENcurr_amount := 0; END IF; should do. Erik Jones Software Developer | Emma® erik@myemma.com 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
В списке pgsql-sql по дате отправления: