Ich habe bislang nur c/java/vba programmiert und wurde gestern auf unsere datenbank losgelassen. bislang haben bei uns consultans die datenbankanpassungen gemacht, nun ist es meine neue aufgabe. ich hatte sql das letzte mal vor ca 4 jahren im studium.
zum system, es handelt sich um oracle 10g r2.
auf die datenbank(en) greife ich via sqldeveloper zu.
es gibt eine tabelle mit um die 120 spalten. geschiet auf besagte tabelle ein insert oder update, greift ein trigger ein und schreibt die werte des anzulegenden datensatzes um.
der trigger ist über 48 bildschirme lang (kein witz ). es wird 3x etwas ähnliches gemacht.
im klartext. ein artikel wird in werk a angelegt und automatisch auf alle anderen werke verteilt. das funktioniert soweit aber des ding ist unübersichtlich und es ist anzunehmen, dass noch einige werke hinzu kommen.
ich würde gern die redundanz rausnehmen, indem ich die Zuweisung der Variablen sowie das insert in ne funktion schmeiße.
der funktion möchte ich nen cursor sowie das new objekt übergeben aber genau des ist der haken.
-> geht das überhaupt, wenn ja wie ?
was im trigger die zeile : REFERENCING OLD AS OLD NEW AS NEW
bewirkt konnte ich leider in der funktion nicht nachstellen
deswegen die idee mit dem übergeben des new.
ist es eigentlich möglich, dass insert irgendwie mit dem new aufzurufen, ohne alle 120 parameter einzeln aufzulisten?
ps.: was mir jetzt noch eingefallen: unter welchem stichpunkt finde ich via goole etwas über dieses new. nen normaler parameter ist es ned nen objekt scheints aber auch ned zu sein?!
zum system, es handelt sich um oracle 10g r2.
auf die datenbank(en) greife ich via sqldeveloper zu.
es gibt eine tabelle mit um die 120 spalten. geschiet auf besagte tabelle ein insert oder update, greift ein trigger ein und schreibt die werte des anzulegenden datensatzes um.
der trigger ist über 48 bildschirme lang (kein witz ). es wird 3x etwas ähnliches gemacht.
im klartext. ein artikel wird in werk a angelegt und automatisch auf alle anderen werke verteilt. das funktioniert soweit aber des ding ist unübersichtlich und es ist anzunehmen, dass noch einige werke hinzu kommen.
ich würde gern die redundanz rausnehmen, indem ich die Zuweisung der Variablen sowie das insert in ne funktion schmeiße.
der funktion möchte ich nen cursor sowie das new objekt übergeben aber genau des ist der haken.
-> geht das überhaupt, wenn ja wie ?
Code:
create or replace TRIGGER trg_tb_to_tbX
AFTER UPDATE OR INSERT ON tb
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
->120 Variablen.....
-- Verarbeitung Werk B
OPEN tb_cursor FOR SELECT * FROM tb_WerkB
WHERE tb_artikel_nr = :NEW.tb_artikel_nr;
FETCH tb_cursor INTO tb_row;
IF tb_cursor%NOTFOUND THEN
Rabat := :NEW.RABAT;
...
IF :NEW.LAKIERUNG = ' ' THEN
NEW.LAKIERUNG := 'RAL2000'
....
end if
INSERT INTO tb_WerkB VALUES (....120 parameter....);
end if
close cursor
was im trigger die zeile : REFERENCING OLD AS OLD NEW AS NEW
bewirkt konnte ich leider in der funktion nicht nachstellen
deswegen die idee mit dem übergeben des new.
ist es eigentlich möglich, dass insert irgendwie mit dem new aufzurufen, ohne alle 120 parameter einzeln aufzulisten?
ps.: was mir jetzt noch eingefallen: unter welchem stichpunkt finde ich via goole etwas über dieses new. nen normaler parameter ist es ned nen objekt scheints aber auch ned zu sein?!
Zuletzt bearbeitet: