Re: MAX() of 0 records.

From: benoit(at)cyberdeck(dot)net
To: Paul McGarry <paulm(at)opentec(dot)com(dot)au>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: MAX() of 0 records.
Date: 2000-07-07 08:32:35
Message-ID: 200007070832.KAA23787@benoit.dagon.pdt
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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
> THEN
> UPDATE ... =MAX() ...
> ELSE
> UPDATE SET ... =0 ...
> END IF
> ====
> ?
>
> Thanks
>
> --
> Paul McGarry mailto:paulm(at)opentec(dot)com(dot)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

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

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Paul McGarry 2000-07-07 08:54:37 Re: [SQL] MAX() of 0 records.
Previous Message Antti Linno 2000-07-07 07:10:50 Ancient postgres+EXCEPT