Guest User

Untitled

a guest
Jun 28th, 2018
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE Autok (
  2.     ID int NOT NULL PRIMARY KEY,
  3.     Rendszám CHAR(7) NOT NULL,
  4.     Szín VARCHAR(10) NOT NULL,
  5.     Kor int,
  6.     Ár FLOAT
  7. )
  8.  
  9. /* 1. Készíts egy tárolt eljárást, mely bemenõ paraméterként megkapja egy autó rendszámát és
  10.    egy módosítás érétket (ez lehet + vagy -), mely az ár módosítását tartalmazza, és elvégzi
  11.    az adott rendszámú autónál az ár módosítását.*/
  12.  
  13. CREATE OR REPLACE PROCEDURE ArModositas1(rsz IN CHAR, delta IN FLOAT) AS
  14. BEGIN
  15.     UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
  16. END;
  17.  
  18. /* 2. Az elõzõ tárolt eljárásból varázsolj olyan eljárást, mely hibakezeléssel megoldva figyel-
  19.    meztet, ha az adott rendszámú autóból több is létezik. (Üzenet a képernyõre!)*/
  20.  
  21. CREATE OR REPLACE PROCEDURE ArModositas2(rsz IN CHAR, delta IN FLOAT) AS
  22. db NUMBER;
  23. sokvan EXCEPTION;
  24. BEGIN
  25.     SELECT COUNT(*) INTO db FROM autok WHERE Rendszám = rsz;
  26.     IF (db > 1) THEN
  27.         RAISE sokvan;
  28.     END IF;
  29.        
  30.     UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
  31. EXCEPTION
  32.     WHEN sokvan THEN
  33.         dbms_output.put_line('Túl sok autó van.');
  34. END;
  35.  
  36. /* 3. Újabb varázsolat, és kezelje az eljárás azt is, ha a paraméter rendszámhoz nem tartozik autó! */
  37.  
  38. CREATE OR REPLACE PROCEDURE ArModositas3(rsz IN CHAR, delta IN FLOAT) AS
  39. db NUMBER;
  40. sokvan EXCEPTION;
  41. BEGIN
  42.     SELECT COUNT(*) INTO db FROM autok WHERE Rendszám = rsz;
  43.     IF (db = 0) THEN
  44.         RAISE sokvan;
  45.     END IF;
  46.    
  47.     UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
  48. EXCEPTION
  49.     WHEN sokvan THEN
  50.         dbms_output.put_line('Nincs autó.');
  51. END;
  52.  
  53.  
  54. /*4. Újabb változtatás saját hibakezelés hozzáadásával, és ha C-betûvel kezdõdõ rendszámú autó
  55.    árát szeretnénk módosítani, akkor írja ki az eljárást, hogy: Mission Impossible, és ne
  56.    végezze el a módosítást!*/
  57. CREATE OR REPLACE PROCEDURE ArModositas4(rsz IN CHAR, delta IN FLOAT) AS
  58. db NUMBER;
  59. sokvan EXCEPTION;
  60. BEGIN
  61.     IF (SUBSTR(rsz, 0, 1) = 'C') THEN
  62.         RAISE sokvan;
  63.     END IF;
  64.    
  65.     UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
  66. EXCEPTION
  67.     WHEN sokvan THEN
  68.         dbms_output.put_line('C-vel kezdődik.');
  69. END;
  70.  
  71. /*5. Készíts egy tárolt függvényt, mely bemenõ paraméterként kap egy színt, egy cursorba
  72.    berakja az adott színû autók adatait, ezután a cursort kezelve meghatározza, majd visszaadja
  73.    az adott színû autók átlagárát.*/
  74. CREATE OR REPLACE FUNCTION SzinAtlag(szin IN VARCHAR) RETURN FLOAT AS
  75. db int;
  76. osszeg FLOAT;
  77. CURSOR lista IS SELECT Ár FROM Autok WHERE Szín = szin;
  78. currentPriceRow lista%ROWTYPE;
  79. BEGIN
  80.     db := 0;
  81.     osszeg := 0;
  82.  
  83.     FOR currentPriceRow IN lista
  84.     LOOP
  85.         osszeg := osszeg + currentPriceRow.Ár;
  86.         db := db + 1;
  87.     END LOOP;
  88.  
  89.     RETURN osszeg / db;
  90. END;
  91.  
  92. /*6. Készíts egy tárolt eljárást, mely bemenõ paraméterként kap egy árat, egy százalék értéket,
  93.    és egy relációs jelet (<, =, >).
  94.    Egy cursorba átrakja a megkapott ár és a reláció figyelembe vételével az autók adatait,
  95.    és a cursort kezelve módosítja az autók árát a paraméterként megadott értékkel.*/
  96.  
  97. CREATE OR REPLACE PROCEDURE ArModositas6(ar IN FLOAT, percentage IN FLOAT, rel IN CHAR) AS
  98. CURSOR lista IS SELECT Ár FROM Autok;
  99. currentPriceRow lista%ROWTYPE;
  100. szazalek EXCEPTION
  101. BEGIN
  102.     IF (szazalek < -1) THEN
  103.         RAISE szazalek;
  104.     END IF;
  105.  
  106.     FOR currentPriceRow IN lista
  107.     LOOP
  108.         IF (rel = '<' AND currentPriceRow.Ár < ar) THEN
  109.             currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
  110.         ELSEIF (rel = '>' AND currentPriceRow.Ár > ar) THEN
  111.             currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
  112.         ELSEIF (rel = '=' AND currentPriceRow.Ár = ar) THEN
  113.             currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
  114.         END IF;
  115.     END LOOP;
  116. END;
  117.  
  118. /* 7.  Az elõbbi eljárást módosítsd úgy, hogy lefutáskor írja ki a módosított rekordok számát! */
  119. CREATE OR REPLACE PROCEDURE ArModositas6(ar IN FLOAT, percentage IN FLOAT, rel IN CHAR) AS
  120. CURSOR lista IS SELECT Ár FROM Autok;
  121. currentPriceRow lista%ROWTYPE;
  122. db int := 0;
  123. szazalek EXCEPTION
  124. BEGIN
  125.     IF (szazalek < -1) THEN
  126.         RAISE szazalek;
  127.     END IF;
  128.  
  129.     FOR currentPriceRow IN lista
  130.     LOOP
  131.         IF (rel = '<' AND currentPriceRow.Ár < ar) THEN
  132.             currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
  133.             db := db + 1;
  134.         ELSEIF (rel = '>' AND currentPriceRow.Ár > ar) THEN
  135.             currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
  136.             db := db + 1;
  137.         ELSEIF (rel = '=' AND currentPriceRow.Ár = ar) THEN
  138.             currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
  139.             db := db + 1;
  140.         END IF;
  141.     END LOOP;
  142. END;
Add Comment
Please, Sign In to add comment