I probably didn't make this clear enough:When grilled further on (Mon, 09 Feb 2004 12:42:10 +0000), Mark Gibson <[EMAIL PROTECTED]> confessed:
CREATE RULE bag_abs AS ON INSERT TO bag_test WHERE EXISTS (SELECT 1 FROM bag_test WHERE item = NEW.item) DO INSTEAD UPDATE bag_test SET qty = NEW.qty WHERE item = NEW.item;
CREATE RULE bag_rel AS ON INSERT TO bag_test
WHERE
EXISTS (SELECT 1 FROM bag_test WHERE item = NEW.item)
DO INSTEAD
UPDATE bag_test SET qty = qty + NEW.qty WHERE item = NEW.item;
I'm no expert, just up early. I believe both of these rules are
tripping. bag_abs is likely going first, then bag_rel, so bag_abs is inserting the
record,
then bag_rel is updating it. You could verify this by deleting the two
rules,
then re-creating in the opposite order, and see if your inserted values
change.
How would you expect the system to choose one of the two rules, which is what you apparently expect?
The system doesn't choose, YOU choose EITHER 'bag_abs' OR 'bag_rel' depending
on which behaviour is most appropriate for your application.
'bag_del' can be used in combination with either, to remove empty items.
The 'bag_abs'/'bag_del' rules work perfectly - I've provided them for feedback,
and hopefully others will find them useful.
It's only the 'bag_rel' rule that is giving me a headache.
Also, IIRC, rules are applied in alphabetical order, NOT the order in which they were created.
Cheers.
-- Mark Gibson <gibsonm |AT| cromwell |DOT| co |DOT| uk> Web Developer & Database Admin Cromwell Tools Ltd. Leicester, England.
---------------------------(end of broadcast)--------------------------- TIP 7: don't forget to increase your free space map settings