Skip navigation

10. példa

RAPID RALLY adatbázis

A példa gyakorlásához hozza létre az adatbázist a fájlban lévő utasításokkal!

Reflexió

Hozzuk létre a RAPID RALLY autóversenyre benevezett versenyzők tábláját. Készítsünk triggert, amely minden beillesztett versenyzőhöz megkísérel alábbi feltételeknek megfelelő partnert keresni:

  1. a partnerek nemzetisége egyezzen meg,
  2. a partnerek minősítése legyen 20 ponton belül,
  3. a feladatkörök illeszkedjenek.

Tötse fel a partner oszlopokat(!) a feltételeknek megfelelően.

CREATE OR REPLACE TRIGGER rally_insert
BEFORE INSERT ON rally
FOR EACH ROW
DECLARE
    CURSOR versenyzők IS SELECT * FROM rally WHERE partner = '---';
BEGIN
    FOR v IN versenyzők LOOP
        IF v.nemzetiség = :NEW.nemzetiség
        AND ABS(v.minősítés - :NEW.minősítés) < 20
        AND v.feladatkör != :NEW.feladatkör THEN
           :NEW.partner := v.név;
           UPDATE rally SET partner = :NEW.név WHERE név = v.név;
           EXIT;
        END IF;
    END LOOP;
END;
/

CREATE OR REPLACE TRIGGER rally_insert
BEFORE INSERT ON rally
FOR EACH ROW
DECLARE
     partnerneve VARCHAR2(20);
     CURSOR versenyzők IS SELECT név FROM rally WHERE partner = '---'
        AND nemzetiség = :NEW.nemzetiség
        AND feladatkör != :NEW.feladatkör
        AND ABS(minősítés - :NEW.minősítés) < 20;
BEGIN
     OPEN versenyzők;
     FETCH versenyzők INTO partnerneve;
     IF versenyzők%FOUND THEN
        :NEW.partner := partnerneve;
        UPDATE rally SET partner = :NEW.név WHERE név = partnerneve;
     END IF;
     CLOSE versenyzők;
END;
/