Šodien esmu noņēmies nereāli ar Oracle temporālas datubāzes veidošanu. Visriebīgākais ir tas, ka viss pilnīgi ir pabeigts, izņemot viena triggerīša ieviešanu relāciju objektu datu bāzes laukiem, kas satur objektu tabulas. Nu kaut vai mirsti nost, bet nesanāk...
Ja jūties ļoti advancēts Oracle datu bāzu projektēšanā vai vismaz triggerošanā, tad lasi turpinājumu.
Tātad - ir man divi objektu tipi:
CREATE OR REPLACE TYPE alga_tips AS OBJECT(unalga NUMBER(7,2),
l_no DATE,
l_lidz DATE);
CREATE OR REPLACE TYPE objekts_tips AS OBJECT(No šiem objektu tipiem ir uztaisītas divas objektu tabulas:objekts NUMBER(7,2),
l_no DATE,
l_lidz DATE);
CREATE OR REPLACE TYPE alga_tab AS TABLE OF alga_tips;Tālāk tiek izveidota relāciju objektu datu tabula:CREATE OR REPLACE TYPE objekts_tab AS TABLE OF objekts_tips;
CREATE TABLE pidari(Tagad mums gribētos ieviest trigerīti, kas moderēs, lai nepareizus datus nevarētu ielikt tabulā, bet te arī es apstājos - piemērā būs redzams kā var apstrādāt parastus relāciju datus, bet kā tikt pie objektu datiem, es neiebraucu!id NUMBER,
vards VARCHAR2(25),
uzvards VARCHAR2(30),
alga_s alga_tab,
objekts_s objekts_tab)
NESTED TABLE alga_s STORE AS b_al_iev,
NESTED TABLE objekts_s STORE AS b_ob_iev;
CREATE OR REPLACE TRIGGER check_dataIr varianti kā man nomoderēt objektuAFTER INSERT OR UPDATE ON buvuzraugi
FOR EACH ROW
BEGIN
IF ((:new.vards IS NULL) OR (:new.uzvards IS NULL)) THEN
DBMS_OUTPUT.put_line('Vaards vai uzvaards nav pareizs');
RAISE_APPLICATION_ERROR(-20000, 'Proceduura tika paartraukta!');
END IF;
END;
.
RUN;
alga_s
un objekts_s
laukus?
Kāda jēga no šāda trigera, kurš izsauc error pēc inserta vai updeita?
Sveiks,
Nezinu vai tas joprojam ir aktuāli, bet tomēr nolēmu atbildēt. Nested tabula iekš triggera/plsql ir parasta kolekcija, tāpēč, lai izmantotu alga_s tev vienkārši ir jāuzraksta for cilpu, kas izies cauri visai kolekcijai. Piemēram:
CREATE OR REPLACE TRIGGER check_data
AFTER INSERT OR UPDATE ON pidari
FOR EACH ROW
BEGIN
for i in :new.alga_s.first .. :new.alga_s.last loop
DBMS_OUTPUT.put_line(:new.alga_s(i).alga);
end loop;
END;
Nu un protams pirmais jautājums kuru ir jāuzdod ir, kāpēc vispār tas viss ir vajadzīgs? :)
Ar cieņu,
Edgars
asktom.oracle.com