Results 1 to 6 of 6
  1. #1
    Join Date
    Jan 2004
    Posts
    8

    Unanswered: 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?

  2. #2
    Join Date
    Sep 2002
    Location
    UK
    Posts
    5,171
    Provided Answers: 1

    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?

  3. #3
    Join Date
    Jan 2004
    Posts
    8
    Oke, thanks for your reaction. I'll try it as soon as possible (probably next monday).

  4. #4
    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.

  5. #5
    Join Date
    Sep 2002
    Location
    UK
    Posts
    5,171
    Provided Answers: 1
    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.

  6. #6
    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.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •