Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. /*procedura dodajaca nowe auto do salonu*/
  2.  
  3. CREATE OR REPLACE PROCEDURE dodaj_auto(samochod auto.auto_id%TYPE, markaa auto.marka%TYPE, modell auto.model%TYPE, cenaa auto.cena%TYPE, salonn auto.salon_id%TYPE)
  4. AS
  5. BEGIN
  6. INSERT INTO auto(auto_id, marka, model,cena,salon_id)
  7. VALUES (samochod, markaa,modell, cenaa, salonn);
  8. END;
  9. /
  10.  
  11. select * from auto;
  12.  
  13. create sequence auto_seq start with 24;
  14.  
  15. execute dodaj_auto(auto_seq.nextval,'polonez','vaio',3000,2);
  16.  
  17. select * from auto;
  18.  
  19. /* procedura ktora usuwa auto z salonu*/
  20.  
  21. CREATE OR REPLACE PROCEDURE usun_auto(samochod auto.auto_id%TYPE, salonn auto.salon_id%TYPE)
  22.  
  23. AS
  24. BEGIN
  25. DELETE FROM auto u
  26. WHERE u.auto_Id = samochod
  27. AND u.salon_id =salonn ;
  28. END;
  29. /
  30.  
  31. execute usun_auto(44,2);
  32.  
  33. select * from auto;
  34.  
  35. /* procedura modyfikujaca cene auta*/
  36. select * from auto;
  37.  
  38. CREATE OR REPLACE PROCEDURE aktualizuj_cene(samochod auto.auto_ID%TYPE, cenaa auto.cena%TYPE)
  39. AS
  40. BEGIN
  41. UPDATE auto o
  42. SET o.cena = cenaa
  43. WHERE o.auto_id=samochod;
  44. END;
  45. /
  46. SHOW ERR;
  47.  
  48. execute aktualizuj_cene(12,20100);
  49.  
  50. select * from auto;
  51.  
  52. /* procedura dodajaca losowa nazwe salonu*/
  53.  
  54. drop sequence adres_seq;
  55. drop sequence salon_seq;
  56. create sequence salon_seq start with 6;
  57. create sequence adres_seq start with 10;
  58.  
  59. create or replace procedure insert_ran_salon
  60. as
  61. begin
  62. insert into salon
  63. values(
  64. salon_seq.nextval,
  65. adres_seq.nextval,
  66. DBMS_RANDOM.STRING('x',8));
  67. end;
  68. /
  69.  
  70. execute insert_ran_salon;
  71.  
  72. select * from salon;
  73.  
  74. /* zwieksza wynagrodzenie 3 pracownikom ktorzy najmniej zarabiaja odpowiednio o 15, 10, 5%*/
  75.  
  76.  
  77.  
  78. select * from pracownicy;
  79.  
  80. CREATE OR REPLACE PROCEDURE wynagrodzenie_pracownikow IS
  81. CURSOR wszyscy_pracownicy IS
  82. SELECT * FROM pracownicy p
  83. ORDER BY p.wynagrodzenie ASC
  84. FOR UPDATE;
  85.  
  86. liczydlo NUMBER(2):=1;
  87. srednia NUMBER (8, 2);
  88.  
  89. BEGIN
  90. DBMS_OUTPUT.ENABLE;
  91.  
  92. FOR wy IN wszyscy_pracownicy LOOP
  93. IF (liczydlo =1) THEN
  94. UPDATE pracownicy p
  95. SET p.wynagrodzenie = p.wynagrodzenie +(p.wynagrodzenie *0.15 )
  96. WHERE p.pracownicy_ID=wy.pracownicy_id;
  97. END IF;
  98. IF (liczydlo =2) THEN
  99. UPDATE pracownicy p
  100. SET p.wynagrodzenie = p.wynagrodzenie +(p.wynagrodzenie *0.10 )
  101. WHERE p.pracownicy_id=wy.pracownicy_id;
  102. END IF;
  103. IF (liczydlo =3) THEN
  104. UPDATE pracownicy p
  105. SET p.wynagrodzenie = p.wynagrodzenie +(p.wynagrodzenie *0.05 )
  106. WHERE p.pracownicy_id=wy.pracownicy_id;
  107. END IF;
  108. liczydlo:=liczydlo + 1;
  109. END LOOP;
  110. END;
  111. /
  112.  
  113. EXECUTE wynagrodzenie_pracownikow;
  114.  
  115. select * from pracownicy;
  116.  
  117. /* wykorzystanie select into obliczanie roznicy */
  118.  
  119. CREATE OR REPLACE FUNCTION roznica
  120.  
  121. RETURN NUMBER
  122.  
  123. IS
  124.  
  125. minimalna naprawa.cena%TYPE;
  126. maksymalna naprawa.cena%TYPE;
  127. roznica naprawa.cena%TYPE;
  128.  
  129. BEGIN
  130.  
  131. SELECT Min(cena)
  132. INTO minimalna
  133. FROM naprawa;
  134.  
  135. SELECT Max(cena)
  136. INTO maksymalna
  137. FROM naprawa;
  138.  
  139. roznica:= maksymalna - minimalna;
  140.  
  141. RETURN roznica;
  142.  
  143. END;
  144. /
  145. SHOW ERR;
  146. /
  147.  
  148. select roznica() from dual;
  149.  
  150. /* cos tam z wyjatkami */
  151.  
  152.  
  153. CREATE OR REPLACE PROCEDURE wszystkie IS
  154.  
  155. CURSOR pracownik IS
  156. SELECT *
  157. FROM pracownicy
  158. FOR UPDATE OF pracownicy.salon_id;
  159.  
  160. wyjatek EXCEPTION;
  161.  
  162. zm_salon pracownik%ROWTYPE;
  163.  
  164. BEGIN
  165.  
  166. FOR zm_salon IN pracownik LOOP
  167.  
  168. IF zm_salon.salon_id IS NULL THEN
  169. RAISE wyjatek;
  170. END IF;
  171.  
  172.  
  173. END LOOP;
  174.  
  175. EXCEPTION
  176.  
  177. WHEN wyjatek THEN DBMS_OUTPUT.PUT_LINE('Brak przypisanego salonu do pracownika ! Sprawdz baze!');
  178.  
  179. END;
  180. /
  181. SHOW ERR;
  182. /
  183.  
  184. --set serveroutput on
  185. call wszystkie();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement