Nedienas ar oracle!

Jānis Rubļevskis (koko) // 2005. gada 10. novembrī, 16:54 // #Datori // 5 komentāri 

Š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(

alga NUMBER(7,2),

l_no DATE,

l_lidz DATE);

un
CREATE OR REPLACE TYPE objekts_tips AS OBJECT(

objekts NUMBER(7,2),

l_no DATE,

l_lidz DATE);

No šiem objektu tipiem ir uztaisītas divas objektu tabulas:
CREATE OR REPLACE TYPE alga_tab AS TABLE OF alga_tips;

CREATE OR REPLACE TYPE objekts_tab AS TABLE OF objekts_tips;

Tālāk tiek izveidota relāciju objektu datu tabula:
CREATE TABLE pidari(

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;

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!
CREATE OR REPLACE TRIGGER check_data

AFTER 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;

Ir varianti kā man nomoderēt objektu alga_s un objekts_s laukus?

Komentāri

Kāda jēga no šāda trigera, kurš izsauc error pēc inserta vai updeita?

Lai nodotu laboriņu - tāda jēga!

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

Paldies! Tagad zināsim!

A vajadzīgs bija tāpēc, ka tāds bija uzdevums :)

Paud savu subjektīvo viedokli:

Visi lauki (izņemot interneta vietni) aizpildāmi obligāti!
E-pasts publiski netiks parādīts.
Zinot vairākumu, komentāros tagi netiek atrādīti kā tagi. Linki automātiski pārveidosies par spiežamiem (cerams).
Bloga īpašnieks patur tiesības ļaunus komentārus dzēst vai pārveidot cilvēkiem patīkamākā formā, bet tajā pašā laikā neatbild par komentāru saturu.