Jak stworzyć trigger i funkcję w pl/sql

0

Mam takie 3 tabelę:
Zap.PNG

jak zrobić, aby tabela LACZACA_W_S wypełniała się automatycznie po wstawieniu danych do tabeli WYPOZYCZENIA?

Próbuję zrobić coś takiego, tylko że z tego chyba trzeba zrobić funkcję i zrobić jakiś trigger który będzie to wywoływał po insercie na tabeli WYPOZYCZENIA. Dobrze myślę? Będę wdzięczny za każdą podpowiedź.

DECLARE
	v_ID1 	VARCHAR2(30);
	v_ID2 	VARCHAR2(30); 
BEGIN
v_ID1 := (SELECT MAX(IDWYPOZYCZENIA) FROM WYPOZYCZENIA);
  v_ID2 := (SELECT IDNRREJESTRACYJNY FROM WYPOZYCZENIA WHERE IDWYPOZYCZENIA = v_ID1);
  INSERT INTO LACZACA_W_S(IDWYPOZYCZENIA, IDNRREJESTRACYJNY)
  VALUES(v_ID1, v_ID2);
END; 
0

Każdy z wypożyczonych samochodów będzie miał oddzielny rekord w tabeli wypozyczenia tak ? (ponieważ np data zwrotu poszczególnych aut może być inna)

0

@hipekk dokładnie będzie miał.
Może to pomoże:
Capture.PNG

1

Zapytałem o to bo nie do końca rozumiem idee tej tabeli złączeniowej...

1

tabela laczaca_w_s jest zbędna

0

@abrakadaber dzięki za potwierdzenie.
A teraz takie pytanie w ramach pisania funkcji pl/sql

 
CREATE OR REPLACE PROCEDURE FWS IS
DECLARE
  deadlock_detected EXCEPTION;
	v_ID1   NUMBER(38,0);
	v_ID2 	VARCHAR2(10);

BEGIN
  v_ID1 := (SELECT MAX(IDWYPOZYCZENIA) FROM WYPOZYCZENIA);
  v_ID2 := (SELECT IDNRREJESTRACYJNY FROM WYPOZYCZENIA WHERE IDWYPOZYCZENIA = v_ID1);
  INSERT INTO LACZACA_W_S(IDWYPOZYCZENIA, IDNRREJESTRACYJNY)
  VALUES(v_ID1, v_ID2);
END;

Dostaję syntax error, expected | <, jak to powinno wyglądać?

1
CREATE OR REPLACE PROCEDURE FWS IS
  deadlock_detected EXCEPTION;
    v_ID1   NUMBER(38,0);
    v_ID2     VARCHAR2(10);
 
BEGIN
  SELECT MAX(IDWYPOZYCZENIA) INTO  v_ID1 FROM WYPOZYCZENIA;
  SELECT IDNRREJESTRACYJNY into v_ID2 FROM WYPOZYCZENIA WHERE IDWYPOZYCZENIA = v_ID1;
  INSERT INTO LACZACA_W_S(IDWYPOZYCZENIA, IDNRREJESTRACYJNY)
  VALUES(v_ID1, v_ID2);
END;

no i wypadało by się zabezpieczyć na wypadek braku danych

0

@abrakadaber jeszcze raz dzięki wielkie.
Mam nadzieję, że to już moje ostanie pytanie.

 
CREATE TRIGGER trig_fws
AFTER INSERT ON WYPOZYCZENIA
FOR EACH ROW
BEGIN
execute procedure FWS();
END;

Dostaję znowu syntax error, expected (.

1

bez execute procedure - sama nazwa procedury wystarczy

1 użytkowników online, w tym zalogowanych: 0, gości: 1