Kreis
CREATE TABLE kreis
(id NUMBER NOT NULL,
radius NUMBER NOT NULL,
flaeche NUMBER,
changed NUMBER)
PCTFREE 10
INITRANS 1
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOCACHE
MONITORING
NOPARALLEL
LOGGING
/
ALTER TABLE kreis
ADD CONSTRAINT id_pk PRIMARY KEY (id)
USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
)
/
ALTER TABLE kreis
ADD CONSTRAINT radius_chk CHECK (radius > 0
)
/
CREATE OR REPLACE TRIGGER trg_kreis_id
BEFORE
INSERT
ON kreis
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
:new.id := hr_seq.nextval;
end;
/
CREATE OR REPLACE TRIGGER trg_kreis_flaeche
BEFORE
INSERT OR UPDATE
ON kreis
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
:new.flaeche := kreis_flaeche(:new.radius);
end;
/
CREATE OR REPLACE TRIGGER trg_changed
BEFORE
UPDATE OF radius
ON kreis
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
c number;
begin
-- geht
c := nvl(:old.changed, 0);
:new.changed := c + 1;
-- geht nicht
-- update kreis set changed = nvl(:old.changed, 0) + 1 where id = :old.id;
end;
/