MAX() of 0 records. - Mailing list pgsql-sql

From Paul McGarry
Subject MAX() of 0 records.
Date
Msg-id 396535EF.8132CF80@opentec.com.au
Whole thread Raw
Responses Re: MAX() of 0 records.  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: MAX() of 0 records.  (benoit@cyberdeck.net)
List pgsql-sql
Hello,

I wish to perform the following query in a plsql function upon an
update/insert/delete trigger:

UPDATE entry_stats 
SET entry_maxprice=MAX(item_price) 
FROM item 
WHERE item.item_entry_id=NEW.item_entry_id AND item.item_live = 't';

However there will be situations where there are no records for
a given item_entry_id with item_live='t'. Currently when I try
do update/insert a record so that this occurs I get the following
error 'ERROR:  ExecutePlan: (junk) 'ctid' is NULL!' and the
insert/update attempt is rolled back.

In this scenario I want entry_stats.entry_maxprice to be set to zero 
(which is also the default value for that column if it's any help).

Is there a good way of going about this or should I just be wrapping
the whole thing up in an
====
IF (COUNT(*) FROM item   WHERE item.item_entry_id=NEW.item_entry_id    AND item.item_live = 't')>0
THENUPDATE ... =MAX() ...
ELSEUPDATE SET ... =0 ...
END IF
====
?

Thanks

-- 
Paul McGarry            mailto:paulm@opentec.com.au 
Systems Integrator      http://www.opentec.com.au 
Opentec Pty Ltd         http://www.iebusiness.com.au
6 Lyon Park Road        Phone: (02) 9878 1744 
North Ryde NSW 2113     Fax:   (02) 9878 1755


pgsql-sql by date:

Previous
From: "Brett W. McCoy"
Date:
Subject: Re: confused by select.
Next
From: Tom Lane
Date:
Subject: Re: MAX() of 0 records.