create sequence Sq_Logs start with 1 increment by 1; create sequence Sq_Dishes start with 1 increment by 1; 1.Se doreste sa se creeze o rocedura care sa introduca o data cu !ecare comanda o noua intrare intr"un alt tabel log in care sa se consemneze !ecare chelner cati bani a adus restaurantului# create sequence Sq_Logs start with 1 increment by 1; create sequence Sq_Logs start with 1 increment by 1; create sequence Sq_Dishes start with 1 increment by 1; create or relace rocedure log_add$_masa in %umber&_dish_id in %umber&_nume in 'archar() is '_ret dishes.ret*+,-.; begin insert into clients 'alues $Sq_Clientss.next'al&_masa ); insert into C/01%DS 'alues$Sq_Comands.next'al&Sq_Clients.curr'al&_ dish_id); select ret into '_ret 2rom dishes where id3_dish_id ; insert into L/4_+15L. 'alues$Sq_Logs.next'al&_nume&'_ret); begin al.log_add$(&1&1&6'lad6); end; dclare '_num number; begin end log_add; (./ rocedura stocata ri'ata care sa aibe un arametru out in care sa a7am ce 'aloare au comenzile totale ale unui anga8at care 'a ! 2olosita mai aoi intr9o 2unctie entru calcularea salariului !ecarui chelner create or relace rocedure salar $'_nume in 'archar(& '_salar out %umber) is '_n %umber; begin select sum$'anzare) into '_n 2rom log_table where nume 3 '_nume; '_salar #3 '_n; end salar; declare salaru %umber; begin salar$:alex:&salaru); D50S_/;+-;+.-;+_L<%.$salaru); end; =.-rocedura stocata care 'a a'ea un cursor si 'a chema o rocedura ri'ata# Si 'a rezenta salariul !ecarui anga8at $acestia !ind latiti cu 1>* din 'anzari) create or relace rocedure show_salaryes is cursor em_cursor is select distinct nume 2rom log_table; salaru %umber; begin 2or '_em_rec in em_cursor loo salar$'_em_rec.nume&salaru); salaru#3salaru?@.1>; D50S_/;+-;+.-;+_L<%.$salaru); end loo; end show_salaryes; A. Se doreste inregistrarea continua a roduselor in stoc ast2el la !ecare rodu comandat automat se 'a scadea din stocul restaurantului acel rodus si rocedura 'a a!sa cat a mai ramas# create or relace 2unction taBe_2rom_StocB$'_nume 'archar(&'_cant %umber) return number is '_num number; begin select cantitate into '_num 2rom stocBs where nume 3'_nume; '_num#3'_num9'_cant; udate stocBs set cantitate3'_num where nume3'_nume; return $'_num); end declare num %umber; begin num#3taBe_2rom_StocB$:aa:&(); D50S_/;+-;+.-;+_L<%.$num); end; Cunctie anonima # Ce trans2orma gramele in Bilograme create or relace 2unction g_to_Bg$'_num number) return number is begin return $'_num?@.@@1); end g_to_Bg; declare '_num %umber; begin '_num#3 g_to_Bg$1@@); dbms_outut.-ut_line$'_num); end; >.-rocedura ce 2oloseste 2unctia anonima # Deoarece rocedeul este di2erit in cazul in care se realizeaza un rearat entru a9i usura munca chelnerului 'om realiza o rocedura in care trebuie doar sa treaca numele rearatului iar din stoc 'or ! retrase toate ingredientele care alcatuiesc reaaratul $.xcetie)# create or relace rocedure dish_stoc$'_nume in 'archar() is '_num number; num number; cursor em_ingr$'_numele 'archar() is select ingredients.nume&ingredients.grama8 2rom ingredients&dishes where rearat_id3dishes.id and dishes.nume3'_numele; begin 2or '_rec in em_ingr$'_nume) loo '_num#3g_to_Bg$'_rec.grama8); num#3taBe_2rom_StocB$'_rec.nume&1); dbms_outut.ut_line$:s9a luat:DD num DD: din stocul de : DD '_rec.nume); end loo; excetion when no_data_2ound then D50S_/;+-;+.-;+_L<%.$:<mi are rau dar in stoc nu mai exista ingrediente necesare entru a 2ace rearatul dorit:); end; $unem o excetie) E. Festaurantul o2er osibilitatea sa maresti ortia si retul in acelasi tim ast2el s9a creat o rocedura care sa 2aca asta entru osatar si sa ii suna ingredientele marite si retul marit ; nu se aote ser'i o ortie este un Bilogram; entru aceasta este ne'oie sa comande de doua ori clientul;$cursor multilu cu arametru ; excetie multili) create or relace rocedure mareste_ortia$'_num in number&'_dish 'archar() is cursor c_dish$'_dish 'archar() is select nume&ret&grama8&id 2rom dishes where nume3'_dish; cursor c_ingredients$num number) is select ? 2rom ingredients where rearat_id3num; ortie_rea_mare excetion; begin 2or rec_dish in c_dish$'_dish) loo i2 rec_dish.grama8?'_numG999 then raise ortie_rea_mare ; end i2; dbms_outut.ut_line$rec_dish.numeDD:-retul 'a ! #:DD rec_dish.ret?'_num DD : si grama8ul 'a ! :DD rec_dish.grama8?'_num); 2or rec_stocB in c_ingredients $rec_dish.id) loo dbms_outut.ut_line$:<ngredientele 'or ! :DD rec_stocB.%;0.DD: si grama8ul :DD rec_stocB.4F101H ?'_num); end loo; end loo; excetion when ortie_rea_mare then dbms_outut.ut_line$:%u se oate ser'i ortie de un Bilogram ne are rau...:); end; I. 1!sarea comenzilor atat a bauturilor cat si a mancarii in cadrul unei comenzi cerute # $ multili cu arametri)# create or relace rocedure arata_comenzi$'_num number) is cursor c_drinBs$num %umber) is select ? 2rom drinBs where id3num; cursor c_dishes$num %umber)is select ? 2rom dishes where id3num; cursor comands $num %umber)is select ? 2rom comands where id3num; begin 2or r_c in comands$'_num) loo dbms_outut.ut_line$:Comanda numarul # :DD r_c.id); dbms_outut.ut_line$: -rearat:); 2or r_dis in c_dishes$r_c.D<SJ.S_<D) loo dbms_outut.-ut_line$: : DDr_dis.nume); end loo; dbms_outut.ut_line$: 5autura:); 2or r_dri in c_drinBs$r_c.DF<%KS_<D) loo dbms_outut.-ut_line$: : DDr_dri.nume); end loo; end loo; end; L.Cursori multili 2ara arametri M cursor imlicit # shimbarea retului la roduse rea ie2tine. 1tunci cand se doreste marirea returilor se stabileste o rocedura in care rodusele cu returi rea mici sa !e marite cu >*# create or relace rocedure adauga is cursor dri is select ? 2rom drinBs where retN>; cursor dish is select ? 2rom dishes where ret N(@; '_num number; begin 2or r_c in dri loo '_num#3r_c.ret?1.@>; udate drinBs set ret3'_num where id3r_c.id; dbms_outut.ut_line$:s9au modi!cat# :DD SOL *F/PC/;%+DD: bauturi:); 2or r_d in dish loo '_num#3r_d.ret?1.@>; udate dishes set ret3'_num where id3r_d.id; dbms_outut.ut_line$:s9au modi!cat:DD SOL *F/PC/;%+ DD : mancaruri:); end loo; end loo; end; +rigers# 1..ste imortant sa stim cine une la ziQstergeQ adauga rete noi si la ce data in cazul in care 2ace ce'a gresit. create or relace trigger log_dish_changes a2ter insert or udate or delete on dishes begin insert into whoChanges 'alues$;S.F&sysdate); end; (. Duminica nu se lucreaza si din aceasta cauza nu 'om lasa e nimeni sa adauge comenzi in aceasta zi# create or relace trigger duminica be2ore insert on clients begin i2 +/_CJ1F$S,SD1+.&:D,:) <% $:S1+:&:S;%:) +J.% F1<S._1--L<C1+</%_.FF/F$9(@>@@& :Duminica e inchis : ); .%D <C; .%D; C/D;L -.%+F; -1CK14.# create or relace acBage al is rocedure log_add$_masa in %umber&_dish_id in %umber&_nume in 'archar(); rocedure show_salaryes; 2unction taBe_2rom_StocB$'_nume 'archar(&'_cant %umber) return number; rocedure dish_stoc$'_nume in 'archar(); rocedure mareste_ortia$'_num in number); rocedure arata_comenzi$'_num number); rocedure adauga; end; si bodyul create or relace acBage body al is rocedure log_add$_masa in %umber&_dish_id in %umber&_drinB_id in %umber&_nume in 'archar() is '_ret number; begin insert into clients 'alues $Sq_Clientss.next'al&_masa ); insert into C/01%DS 'alues$Sq_Comands.next'al&Sq_Clients.curr'al&_ dish_id&_drinB_id); select ret into '_ret 2rom dishes where id3_dish_id; insert into L/4_+15L. 'alues$Sq_Logs.next'al&_nume&'_ret); end log_add; rocedure salar $'_nume in 'archar(& '_salar out %umber) is '_n %umber; begin select sum$'anzare) into '_n 2rom log_table where nume 3 '_nume; '_salar #3 '_n; end salar; rocedure show_salaryes is cursor em_cursor is select distinct nume 2rom log_table; salaru %umber; begin 2or '_em_rec in em_cursor loo salar$'_em_rec.nume&salaru); salaru#3salaru?@.1>; D50S_/;+-;+.-;+_L<%.$salaru); end loo; end show_salaryes; 2unction taBe_2rom_StocB$'_nume 'archar(&'_cant %umber) return number is '_num number; begin select cantitate into '_num 2rom stocBs where nume 3'_nume; '_num#3'_num9'_cant; udate stocBs set cantitate3'_num where nume3'_nume; return $'_num); end taBe_2rom_StocB; 2unction g_to_Bg$'_num number) return number is begin return $'_num?@.@@1); end g_to_Bg; rocedure dish_stoc$'_nume in 'archar() is '_num number; num number; cursor em_ingr$'_numele 'archar() is select ingredients.nume&ingredients.grama8 2rom ingredients&dishes where rearat_id3dishes.id and dishes.nume3'_numele; begin 2or '_rec in em_ingr$'_nume) loo '_num#3g_to_Bg$'_rec.grama8); num#3taBe_2rom_StocB$'_rec.nume&1); dbms_outut.ut_line$:s9a luat:DD num DD: din stocul de : DD '_rec.nume); end loo; excetion when no_data_2ound then D50S_/;+-;+.-;+_L<%.$:<mi are rau dar in stoc nu mai exista ingrediente necesare entru a 2ace rearatul dorit:); end dish_stoc; rocedure mareste_ortia$'_num in number) is cursor c_dish is select nume&ret&grama8&id 2rom dishes; cursor c_ingredients$num number) is select ? 2rom ingredients where rearat_id3num; ortie_rea_mare excetion; begin 2or rec_dish in c_dish loo i2 rec_dish.grama8?'_numG999 then raise ortie_rea_mare ; end i2; dbms_outut.ut_line$rec_dish.numeDD:-retul 'a ! #:DD rec_dish.ret?'_num DD : si grama8ul 'a ! :DD rec_dish.grama8?'_num); 2or rec_stocB in c_ingredients $rec_dish.id) loo dbms_outut.ut_line$:<ngredientele 'or ! :DD rec_stocB.%;0.DD: si grama8ul :DD rec_stocB.4F101H ?'_num); end loo; end loo; excetion when ortie_rea_mare then dbms_outut.ut_line$:%u se oate ser'i ortie de un Bilogram ne are rau...:); end mareste_ortia; rocedure arata_comenzi$'_num number) is cursor c_drinBs$num %umber) is select ? 2rom drinBs where id3num; cursor c_dishes$num %umber)is select ? 2rom dishes where id3num; cursor comands $num %umber)is select ? 2rom comands where id3num; begin 2or r_c in comands$'_num) loo dbms_outut.ut_line$:Comanda numarul # :DD r_c.id); dbms_outut.ut_line$: -rearat:); 2or r_dis in c_dishes$r_c.D<SJ.S_<D) loo dbms_outut.-ut_line$: : DDr_dis.nume); end loo; dbms_outut.ut_line$: 5autura:); 2or r_dri in c_drinBs$r_c.DF<%KS_<D) loo dbms_outut.-ut_line$: : DDr_dri.nume); end loo; end loo; end arata_comenzi; rocedure adauga is cursor dri is select ? 2rom drinBs where retN>; cursor dish is select ? 2rom dishes where ret N(@; '_num number; begin 2or r_c in dri loo '_num#3r_c.ret?1.@>; udate drinBs set ret3'_num where id3r_c.id; dbms_outut.ut_line$:s9au modi!cat# :DD SOL *F/PC/;%+DD: bauturi:); end loo; 2or r_d in dish loo '_num#3r_d.ret?1.@>; udate dishes set ret3'_num where id3r_d.id; dbms_outut.ut_line$:s9au modi!cat:DD SOL *F/PC/;%+ DD : mancaruri:); end loo; end adauga; end;