Oracle Procedura: Zwiększ podaną kwotę w zależności od wartości zmiennej

0

Muszę wykonać procedurę zwiększającą rabat o 3% za każdą dodatkową usługę dla klientów, którzy zamówili więcej niż 3 usługi.

Próbowałem zrobić coś na podstawie przykładów z internetu, lecz nie wiem jak napisać pętlę.

BEGIN 
FOR I IN (
    SELECT K.ID_KLIENTA, 
      FROM ID_KLIENTA   K
      JOIN OSOBY        O
    ON P.ID_OSOBY = O.ID_OSOBY
     WHERE 
) LOOP
UPDATE Osoby O
           SET K.ID_KLIENTA = I.ID_KLIENTA
  END LOOP;
END;

Osoby table structure

Id_osoby NUMBER CONSTRAINT osoby_pk PRIMARY KEY,
Imie VARCHAR2(15) NOT NULL,
Nazwisko VARCHAR2(30) NOT NULL,
Wiek NUMBER NOT NULL CONSTRAINT ch_wiek CHECK((Wiek>=0) AND (Wiek<=125)),
Stan_cywilny VARCHAR2(12) NOT NULL,
Telefon VARCHAR2(20),
Pesel CHAR(11) NOT NULL CONSTRAINT osoba_uni UNIQUE,
Id_adresu NUMBER NOT NULL,
CONSTRAINT os_ad_fk FOREIGN KEY (Id_adresu) REFERENCES Adresy(Id_adresu)

Klienci table structure

Id_klienta NUMBER CONSTRAINT klient_pk PRIMARY KEY,
Id_osoby NUMBER NOT NULL CONSTRAINT kl_unique UNIQUE,
Znizka NUMBER,
CONSTRAINT kl_os_fk FOREIGN KEY (Id_osoby) REFERENCES Osoby(Id_osoby)

Uslugi table structure

Id_uslugi NUMBER CONSTRAINT uslugi_pk PRIMARY KEY,
Opis VARCHAR2(500),
Cena NUMBER NOT NULL

Zlecenia table structure

Id_zlecenia NUMBER CONSTRAINT zlecenie_pk PRIMARY KEY,
Id_uslugi NUMBER NOT NULL,
Id_klienta NUMBER NOT NULL,
Id_pracownika NUMBER NOT NULL,
Data_zl DATE NOT NULL,
CONSTRAINT zl_us_fk FOREIGN KEY (Id_uslugi) REFERENCES Uslugi(Id_uslugi),
CONSTRAINT zl_kl_fk FOREIGN KEY (Id_uslugi) REFERENCES Klienci(Id_klienta),
CONSTRAINT zl_pr_fk FOREIGN KEY (Id_uslugi) REFERENCES Pracownicy(Id_pracownika)
1

Wiem co chcesz uzyskać i wiem mniej więcej jak to zrobić tylko nie do końca wiem gdzie chcesz to dodać. Jak rozumiem jeśli klient ma 3 usługi to rabat jest 0 na każdą z usług, natomiast od 4 w zwyż obniżamy cenę o 3% czy dajemy 3% na wszystkie usługi jesli ma więcej niż 3 usługi?

0

@woolfik: Po prostu rabat kumuluje się(zwiększa o 3%) o każdą dodatkową usługę po 4.
Np. Klient zamówił 5 usług, czyli przysługuje mu rabat na wszystkie usługi 6%, jeśli 6 usług to 9% itd.

1

A jak ilosc uslug będzie > 100 to rabat bedzie powyżej 100% ?

0

Na to wychodzi, wykonać procedurę zwiększającą rabat o 3% za każdą dodatkową usługę dla klientów, którzy zamówili więcej niż 3 usługi.

1

http://sqlfiddle.com/#!4/53117/18
takie coś?
ewentualnie z update takie coś:
http://sqlfiddle.com/#!4/80ada/1

0

Dzięki wielkie :)

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