> 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
> THEN
> UPDATE ... =MAX() ...
> ELSE
> UPDATE SET ... =0 ...
> END IF
> ====
> ?
>
> Thanks
>
> --
> Paul McGarry mailto:[EMAIL PROTECTED]
> 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
I once had the same problem with an int4 column and solved it by using the
function below :
CREATE FUNCTION "nulliszero" (int4 )
RETURNS int4 AS
'SELECT 0 WHERE $1 IS NULL
UNION SELECT $1 WHERE $1 IS NOT NULL' LANGUAGE 'SQL';
Your request then would look like :
(...)
SET entry_maxprice=nulliszero(MAX(item_price));
(...)
-Benoit