This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
kurs:row_trigger [2008/11/12 11:37] mh |
kurs:row_trigger [2014/09/10 21:22] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ==== create table ==== | ||
+ | <code> | ||
+ | CREATE TABLE kreis | ||
+ | (id NUMBER, | ||
+ | radius NUMBER, | ||
+ | flaeche NUMBER) | ||
+ | PCTFREE 10 | ||
+ | INITRANS 1 | ||
+ | MAXTRANS 255 | ||
+ | TABLESPACE users | ||
+ | STORAGE ( | ||
+ | INITIAL 65536 | ||
+ | MINEXTENTS 1 | ||
+ | MAXEXTENTS 2147483645 | ||
+ | ) | ||
+ | NOCACHE | ||
+ | MONITORING | ||
+ | / | ||
+ | </code> | ||
+ | |||
+ | ==== fill id ==== | ||
+ | |||
+ | <code> | ||
+ | CREATE OR REPLACE TRIGGER trg_next_id | ||
+ | BEFORE | ||
+ | INSERT | ||
+ | ON kreis | ||
+ | REFERENCING NEW AS NEW OLD AS OLD | ||
+ | FOR EACH ROW | ||
+ | begin | ||
+ | select hr_seq.NEXTVAL into :new.id from dual; | ||
+ | end; | ||
+ | / | ||
+ | </code> | ||
+ | |||
+ | ==== calc radius oder flaeche ==== | ||
+ | |||
+ | <code> | ||
+ | CREATE OR REPLACE TRIGGER trg_calc_flaeche | ||
+ | BEFORE | ||
+ | INSERT OR UPDATE | ||
+ | ON kreis | ||
+ | REFERENCING NEW AS NEW OLD AS OLD | ||
+ | FOR EACH ROW | ||
+ | begin | ||
+ | if :new.flaeche is null then | ||
+ | :new.flaeche := :new.radius**2 * 3.141; | ||
+ | elsif :new.radius is null then | ||
+ | :new.radius := (:new.flaeche / 3.141) ** (1/2); | ||
+ | end if; | ||
+ | dbms_output.put_line('Flaeche ' || :new.flaeche); | ||
+ | dbms_output.put_line('Radius ' || :new.radius); | ||
+ | end; | ||
+ | / | ||
+ | </code> |