1

Temat: wypozyczalnia video problem z IF, CASE,

Witam to jest mój pierwszy post mam nadzieję że mi rozjaśnicie tą kwestię.
To jest kawalek mojej wypozyczalni video
chcialbym osiagnąć aby przy insercie do wypozyczenia filmu byl spelniony warunek
"jeśli dostepne > 0 to dostepne -1"i w tym samym momencie (wypozyczone +1)
wiem że to powinno być zrobione albo przez if albo case jednak nawet przerabiajac manuala nie wychodzi mi to

zrobilem takie update jednak nie wiem jak je wbudować w "if":

UPDATE egzemplarz SET dostepne= dostepne -1 where id_egz=(select id_tytulu  from filmy where tytul='Transformers');
UPDATE egzemplarz SET wypozyczone= wypozyczone +1 where id_egz=(select id_tytulu  from filmy where tytul='Transformers');

--------------egzemplarz---------------------
create table egzemplarz(
id_egz integer,
dostepne integer,
wypozyczone integer,
constraint n1 primary key(id_egz),
constraint n2 foreign key(id_egz) references filmy(id_tytulu)

);
insert into egzemplarz(id_egz,dostepne,wypozyczone)values
((select id_tytulu from filmy where tytul='Transformers'),5,0),
((select id_tytulu from filmy where tytul='Resident Evil'),5,0),
((select id_tytulu from filmy where tytul='Stargate Continuum'),5,0);


Proszę o pomoc

2

Odp: wypozyczalnia video problem z IF, CASE,

Moim zdaniem pola dostepne, wypozyczone powinieneś mieć w tabeli filmy. Wtedy można dopisać  trigger, który po dodaniu do tabeli egzemplarz nowego rekordu automatycznie zwiększy wartość pola dostepne. A jeśli masz jeszcze tabele "wypożyczone" gdzie przechowywał byś informacje, który egzemlarz wypożyczyłeś, któremu klientowi to analogicznie można by  napisać trigger, który sprawdzi czy jest wolny egzemplarz i jeśli jest, to zwiększy wartość pola wypozyczone.

PS
Przy obecnym stanie twojej tabeli musisz wykonywać UPDATE w ten sposób
UPDATE egzemplarz SET dostepne= dostepne -1,wypozyczone= wypozyczone +1 where id_egz=(select id_tytulu  from filmy where tytul='Transformers') and dostepne>0;

3

Odp: wypozyczalnia video problem z IF, CASE,

Dzieki o to mi chodziło, a nie zmieniajac już tabel można by było zastosować coś w tym stylu? wiem ze jeszcze powinno byc else ale nie wychodzi  mi napisanie tego przede wszystkim niewiem czy można tak w ogóle zrobić podejrzewam że składnie mam źle bo za każdym razem kiedy próbuje użyć "if" to wylatuje mi "błąd składni w lub blisko "IF".



IF (select dostepne from egzmplarz where id_egz=(select id_tytulu  from filmy where tytul='Transformers')) > 0 THEN(
  insert into wypozyczenia values
((select id_klienta from klienci where imie='Tomasz'and nazwisko='Szymanski'),(select id_tytulu  from filmy where tytul='Transformers'),'2012-01-02'),
UPDATE egzemplarz SET dostepne= dostepne -1,wypozyczone= wypozyczone +1 where id_egz=(select id_tytulu  from filmy where tytul='Transformers') and dostepne>0;)

END IF;

4

Odp: wypozyczalnia video problem z IF, CASE,

IF-a musisz użyć wewnątrz funkcji