Ik heb de volgende tabellen en view aangemaakt:
CREATE TABLE MEDEWERKER (
MEDEWERKERNUMMER NUMBER NOT NULL,
FUNCTIE VARCHAR2(10) NOT NULL,
VOORNAAMMEDEWERKER VARCHAR2(15) NOT NULL,
ACHTERNAAMMEDEWERKER VARCHAR2(25) NOT NULL,
CONSTRAINT PK_MEDEWERKER PRIMARY KEY (MEDEWERKERNUMMER)
);
CREATE TABLE MEDEWERKERTELNUMMER (
MEDEWERKER NUMBER NOT NULL,
TELEFOONNUMMERMEDEWERKER NUMBER NOT NULL,
CONSTRAINT PK_MEDEWERKERTELNUMMER PRIMARY KEY (MEDEWERKER, TELEFOONNUMMERMEDEWERKER)
);
CREATE OR REPLACE VIEW V_MEDEWERKER AS
SELECT M.MEDEWERKERNUMMER
, M.FUNCTIE
, M.VOORNAAMMEDEWERKER
, M.ACHTERNAAMMEDEWERKER
, T.TELEFOONNUMMERMEDEWERKER
, T.MEDEWERKER
FROM MEDEWERKER M
, MEDEWERKERTELNUMMER T
WHERE T.MEDEWERKER = M.MEDEWERKERNUMMER;
Nou wil ik de volgende trigger toekennen:
create or replace trigger mw_view_trig
instead of update on v_medewerker
for each row
begin
update medewerker
set medewerkernummer = nvl (:new.medewerkernummer, medewerkernummer),
functie = nvl (:new.functie, functie),
voornaammedewerker = nvl (:new.voornaammedewerker, voornaammedewerker),
achternaammedewerker = nvl (:new.achternaammedewerker, achternaammedewerker)
where medewerkernummer = new.medewerkernummer;
update medewerkertelnummer
set medewerker = (:new.medewerker, medewerker),
telefoonnummermedewerker = nvl (:new.telefoonnummermedewerker, telefoonnummermedewerker)
where medewerker = new.medewerker;
end mw_view_trig;
Als ik deze trigger aanmaak dan creeert hij deze wel maar met compilatiefouten. Het doel is dus informatie in de view wijzigen en deze dus meteen in de tabellen aan te passen. Ziet iemand wat ik verkeerd doe?
CREATE TABLE MEDEWERKER (
MEDEWERKERNUMMER NUMBER NOT NULL,
FUNCTIE VARCHAR2(10) NOT NULL,
VOORNAAMMEDEWERKER VARCHAR2(15) NOT NULL,
ACHTERNAAMMEDEWERKER VARCHAR2(25) NOT NULL,
CONSTRAINT PK_MEDEWERKER PRIMARY KEY (MEDEWERKERNUMMER)
);
CREATE TABLE MEDEWERKERTELNUMMER (
MEDEWERKER NUMBER NOT NULL,
TELEFOONNUMMERMEDEWERKER NUMBER NOT NULL,
CONSTRAINT PK_MEDEWERKERTELNUMMER PRIMARY KEY (MEDEWERKER, TELEFOONNUMMERMEDEWERKER)
);
CREATE OR REPLACE VIEW V_MEDEWERKER AS
SELECT M.MEDEWERKERNUMMER
, M.FUNCTIE
, M.VOORNAAMMEDEWERKER
, M.ACHTERNAAMMEDEWERKER
, T.TELEFOONNUMMERMEDEWERKER
, T.MEDEWERKER
FROM MEDEWERKER M
, MEDEWERKERTELNUMMER T
WHERE T.MEDEWERKER = M.MEDEWERKERNUMMER;
Nou wil ik de volgende trigger toekennen:
create or replace trigger mw_view_trig
instead of update on v_medewerker
for each row
begin
update medewerker
set medewerkernummer = nvl (:new.medewerkernummer, medewerkernummer),
functie = nvl (:new.functie, functie),
voornaammedewerker = nvl (:new.voornaammedewerker, voornaammedewerker),
achternaammedewerker = nvl (:new.achternaammedewerker, achternaammedewerker)
where medewerkernummer = new.medewerkernummer;
update medewerkertelnummer
set medewerker = (:new.medewerker, medewerker),
telefoonnummermedewerker = nvl (:new.telefoonnummermedewerker, telefoonnummermedewerker)
where medewerker = new.medewerker;
end mw_view_trig;
Als ik deze trigger aanmaak dan creeert hij deze wel maar met compilatiefouten. Het doel is dus informatie in de view wijzigen en deze dus meteen in de tabellen aan te passen. Ziet iemand wat ik verkeerd doe?