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.

 
Go Back  dBforums > Data Access, Manipulation & Batch Languages > ANSI SQL > trigger (instead of?)

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 01-07-04, 08:27
incredible_ozzy incredible_ozzy is offline
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?
Reply With Quote
  #2 (permalink)  
Old 01-07-04, 10:11
andrewst andrewst is offline
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?
__________________
Tony Andrews
http://tinyurl.com/tonyandrews
Reply With Quote
  #3 (permalink)  
Old 01-08-04, 08:51
incredible_ozzy incredible_ozzy is offline
Registered User
 
Join Date: Jan 2004
Posts: 8
Oke, thanks for your reaction. I'll try it as soon as possible (probably next monday).
Reply With Quote
  #4 (permalink)  
Old 01-12-04, 08:13
incredible_ozzy incredible_ozzy is offline
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.
Reply With Quote
  #5 (permalink)  
Old 01-12-04, 08:28
andrewst andrewst is offline
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.
__________________
Tony Andrews
http://tinyurl.com/tonyandrews
Reply With Quote
  #6 (permalink)  
Old 01-12-04, 08:39
incredible_ozzy incredible_ozzy is offline
Registered User
 
Join Date: Jan 2004
Posts: 8
Talking

Finally!!! It works. Thanks a lot Andrew. I spend weeks on trying to get this right but i just couldn't figure it out.
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On