Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TABLE Autok (
- ID int NOT NULL PRIMARY KEY,
- Rendszám CHAR(7) NOT NULL,
- Szín VARCHAR(10) NOT NULL,
- Kor int,
- Ár FLOAT
- )
- /* 1. Készíts egy tárolt eljárást, mely bemenõ paraméterként megkapja egy autó rendszámát és
- egy módosítás érétket (ez lehet + vagy -), mely az ár módosítását tartalmazza, és elvégzi
- az adott rendszámú autónál az ár módosítását.*/
- CREATE OR REPLACE PROCEDURE ArModositas1(rsz IN CHAR, delta IN FLOAT) AS
- BEGIN
- UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
- END;
- /* 2. Az elõzõ tárolt eljárásból varázsolj olyan eljárást, mely hibakezeléssel megoldva figyel-
- meztet, ha az adott rendszámú autóból több is létezik. (Üzenet a képernyõre!)*/
- CREATE OR REPLACE PROCEDURE ArModositas2(rsz IN CHAR, delta IN FLOAT) AS
- db NUMBER;
- sokvan EXCEPTION;
- BEGIN
- SELECT COUNT(*) INTO db FROM autok WHERE Rendszám = rsz;
- IF (db > 1) THEN
- RAISE sokvan;
- END IF;
- UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
- EXCEPTION
- WHEN sokvan THEN
- dbms_output.put_line('Túl sok autó van.');
- END;
- /* 3. Újabb varázsolat, és kezelje az eljárás azt is, ha a paraméter rendszámhoz nem tartozik autó! */
- CREATE OR REPLACE PROCEDURE ArModositas3(rsz IN CHAR, delta IN FLOAT) AS
- db NUMBER;
- sokvan EXCEPTION;
- BEGIN
- SELECT COUNT(*) INTO db FROM autok WHERE Rendszám = rsz;
- IF (db = 0) THEN
- RAISE sokvan;
- END IF;
- UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
- EXCEPTION
- WHEN sokvan THEN
- dbms_output.put_line('Nincs autó.');
- END;
- /*4. Újabb változtatás saját hibakezelés hozzáadásával, és ha C-betûvel kezdõdõ rendszámú autó
- árát szeretnénk módosítani, akkor írja ki az eljárást, hogy: Mission Impossible, és ne
- végezze el a módosítást!*/
- CREATE OR REPLACE PROCEDURE ArModositas4(rsz IN CHAR, delta IN FLOAT) AS
- db NUMBER;
- sokvan EXCEPTION;
- BEGIN
- IF (SUBSTR(rsz, 0, 1) = 'C') THEN
- RAISE sokvan;
- END IF;
- UPDATE Autok SET Ár = Ár + delta WHERE Rendszám = rsz;
- EXCEPTION
- WHEN sokvan THEN
- dbms_output.put_line('C-vel kezdődik.');
- END;
- /*5. Készíts egy tárolt függvényt, mely bemenõ paraméterként kap egy színt, egy cursorba
- berakja az adott színû autók adatait, ezután a cursort kezelve meghatározza, majd visszaadja
- az adott színû autók átlagárát.*/
- CREATE OR REPLACE FUNCTION SzinAtlag(szin IN VARCHAR) RETURN FLOAT AS
- db int;
- osszeg FLOAT;
- CURSOR lista IS SELECT Ár FROM Autok WHERE Szín = szin;
- currentPriceRow lista%ROWTYPE;
- BEGIN
- db := 0;
- osszeg := 0;
- FOR currentPriceRow IN lista
- LOOP
- osszeg := osszeg + currentPriceRow.Ár;
- db := db + 1;
- END LOOP;
- RETURN osszeg / db;
- END;
- /*6. Készíts egy tárolt eljárást, mely bemenõ paraméterként kap egy árat, egy százalék értéket,
- és egy relációs jelet (<, =, >).
- Egy cursorba átrakja a megkapott ár és a reláció figyelembe vételével az autók adatait,
- és a cursort kezelve módosítja az autók árát a paraméterként megadott értékkel.*/
- CREATE OR REPLACE PROCEDURE ArModositas6(ar IN FLOAT, percentage IN FLOAT, rel IN CHAR) AS
- CURSOR lista IS SELECT Ár FROM Autok;
- currentPriceRow lista%ROWTYPE;
- szazalek EXCEPTION
- BEGIN
- IF (szazalek < -1) THEN
- RAISE szazalek;
- END IF;
- FOR currentPriceRow IN lista
- LOOP
- IF (rel = '<' AND currentPriceRow.Ár < ar) THEN
- currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
- ELSEIF (rel = '>' AND currentPriceRow.Ár > ar) THEN
- currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
- ELSEIF (rel = '=' AND currentPriceRow.Ár = ar) THEN
- currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
- END IF;
- END LOOP;
- END;
- /* 7. Az elõbbi eljárást módosítsd úgy, hogy lefutáskor írja ki a módosított rekordok számát! */
- CREATE OR REPLACE PROCEDURE ArModositas6(ar IN FLOAT, percentage IN FLOAT, rel IN CHAR) AS
- CURSOR lista IS SELECT Ár FROM Autok;
- currentPriceRow lista%ROWTYPE;
- db int := 0;
- szazalek EXCEPTION
- BEGIN
- IF (szazalek < -1) THEN
- RAISE szazalek;
- END IF;
- FOR currentPriceRow IN lista
- LOOP
- IF (rel = '<' AND currentPriceRow.Ár < ar) THEN
- currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
- db := db + 1;
- ELSEIF (rel = '>' AND currentPriceRow.Ár > ar) THEN
- currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
- db := db + 1;
- ELSEIF (rel = '=' AND currentPriceRow.Ár = ar) THEN
- currentPriceRow.Ár := currentPriceRow.Ár * (1 + percentag);
- db := db + 1;
- END IF;
- END LOOP;
- END;
Add Comment
Please, Sign In to add comment