Non ho sottomano un db oracle per provare (ormai da anni), ma mi pare che sia possibile usare CHECK per definire i valori inseribili in un campo.
es nella definizione della tabella...
campo NUMBER(6) CHECK (campo >= 0)
oppure l'uso di if oppure case per l'update ...
campo = campo - case when campo - #value# < 0 then campo
non ricordo l'esatta sintassi da usare, per l'insert non ci dovrebbero essere problemi di numeri negativi ovviamente.