Re: MAX() of 0 records.
От | benoit@cyberdeck.net |
---|---|
Тема | Re: MAX() of 0 records. |
Дата | |
Msg-id | 200007070832.KAA23787@benoit.dagon.pdt обсуждение исходный текст |
Ответ на | MAX() of 0 records. (Paul McGarry <paulm@opentec.com.au>) |
Список | 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@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 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
В списке pgsql-sql по дате отправления: