| |
|
If this is your first visit, be sure to check out the FAQ by clicking the link above.
You may have to register before you can post: click the register link above to proceed.
To start viewing messages, select the forum that you want to visit from the selection below.
|
 |

01-07-04, 08:27
|
|
Registered User
|
|
Join Date: Jan 2004
Posts: 8
|
|
|
trigger (instead of?)
|
|
Hi there people. I made the next tables:
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)
);
After this I made a view wich combines both tables, like this:
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
/
What I want to do next is making a trigger of some kind that makes it possible to update this view. I have been trying but can't get it right. At the moment I'm trying something like this:
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
/
It creates the trigger but with compilation problems. Any idea what I'm doing wrong?
|
|

01-07-04, 10:11
|
|
Moderator.
|
|
Join Date: Sep 2002
Location: UK
Posts: 5,171
|
|
|
Re: trigger (instead of?)
Use SHOW ERROR to see what compilation problems you are getting precisely, and on what line/column.
However, I can see one syntax error here:
update medewerkertelnummer
set medewerker = (:new.medewerker, medewerker)
...
Presumably you meant to use NVL?
|
|

01-08-04, 08:51
|
|
Registered User
|
|
Join Date: Jan 2004
Posts: 8
|
|
|
|
Oke, thanks for your reaction. I'll try it as soon as possible (probably next monday).
|
|

01-12-04, 08:13
|
|
Registered User
|
|
Join Date: Jan 2004
Posts: 8
|
|
oke, I'm back again and I tried everything I could think of (but then again, I'm not an expert).
The trigger is created with no errors but still I can't insert or update any information in this view (I have an instead of insert trigger).
CREATE OR REPLACE TRIGGER v_med_trig
INSTEAD OF INSERT ON V_MEDEWERKER
DECLARE
v_medewerkernummer medewerker.medewerkernummer%type;
v_functie medewerker.functie%type;
v_voornaammedewerker medewerker.voornaammedewerker%type;
v_achternaammedewerker medewerker.achternaammedewerker%type;
v_medewerker medewerkertelnummer.medewerker%type;
v_telefoonnummermedewerker medewerkertelnummer.telefoonnummermedewerker%type;
BEGIN
INSERT INTO MEDEWERKER
(medewerkernummer, functie, voornaammedewerker,
achternaammedewerker)
VALUES
(v_medewerkernummer, v_functie, v_voornaammedewerker,
v_achternaammedewerker);
INSERT INTO MEDEWERKERTELNUMMER
(medewerker, telefoonnummermedewerker)
VALUES
(v_medewerker, v_telefoonnummermedewerker);
END v_med_trig;
Did I make some sort of stupid mistake? Because everytime I try to insert data it complains about not null values.
|
|

01-12-04, 08:28
|
|
Moderator.
|
|
Join Date: Sep 2002
Location: UK
Posts: 5,171
|
|
You are declaring variables like v_medewerkernummer but never initialising them to any value, so they are NULL. In any case, you don't need to declare variables; the trigger should be more like:
CREATE OR REPLACE TRIGGER v_med_trig
INSTEAD OF INSERT ON V_MEDEWERKER
BEGIN
INSERT INTO MEDEWERKER
(medewerkernummer, functie, voornaammedewerker,
achternaammedewerker)
VALUES
(:new.medewerkernummer, :new.functie, :new.voornaammedewerker,
:new.achternaammedewerker);
INSERT INTO MEDEWERKERTELNUMMER
(medewerker, telefoonnummermedewerker)
VALUES
(:new.medewerker, :new.telefoonnummermedewerker);
END v_med_trig;
where each :new.xxx refers to a column in view V_MEDEWERKER.
|
|

01-12-04, 08:39
|
|
Registered User
|
|
Join Date: Jan 2004
Posts: 8
|
|
Finally!!! It works. Thanks a lot Andrew. I spend weeks on trying to get this right but i just couldn't figure it out.
|
|
| Thread Tools |
Search this Thread |
|
|
|
| Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
|
|