Adatbázisok szerver oldali programozása Labor, 2006.03.14.

A VIK Wikiből
(AdatbServerProgJegyzet20060314 szócikkből átirányítva)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.



<< Labor, 2006.03.14. >>

  1. Készíts egy anonim blokkot, ami sorra kiírja a kimenetre a páros számokat 1-től 100-ig, majd a páratlan számokat visszafele 100-tól 1-ig!
    BEGIN
    	FOR i IN 1..50 LOOP
    		DBMS_OUTPUT.put_line(i*2);
    	END LOOP;
    	FOR i IN REVERSE 1..50 LOOP
    		DBMS_OUTPUT.put_line(i*2-1);
    	END LOOP;
    END;
  2. Készíts egy anonim blokkot, aminek van két paramétere, amiket futás előtt állíthatunk, az egyik a pilóta azonosítója, a másik egy évszám. A blokk belsejében írd ki (
    DBMS_OUTPUT.put_line
    ), hogy az adott pilóta az adott szezonban milyen típusú pilótaként (Elsőszámú, Másodszámú, Teszt) szerepelt a Forma-1 világában. Amennyiben hibás paramétereket adtak meg, akkor azt írd ki, hogy nincs megfelelő adat.
    DECLARE
    	pilota_id int := 103;
    	evszam int := 2005;
    	pilota_tipus int;
    BEGIN
    	SELECT pilotatipus INTO pilota_tipus
    	FROM csapat_pilota, csapat_szezon
    	WHERE csapat_pilota.csapatszezonid = csapat_szezon.csapatszezonid AND
    		csapat_pilota.pilotaid = pilota_id AND
    		csapat_szezon.ev = evszam;
    		
    	CASE pilota_tipus
    		WHEN '1' THEN DBMS_OUTPUT.put_line('Elsőszámú');
    		WHEN '2' THEN DBMS_OUTPUT.put_line('Másodszámú');
    		WHEN 'T' THEN DBMS_OUTPUT.put_line('Teszt');
    		ELSE DBMS_OUTPUT.put_line('Nincs megfelelő adat');
    	END CASE;
    END;
  3. Definiálj egy tízelemű egész számok tárolására alkalmas tömböt! Töltsd fel a tömb elemeit sorra páros számokkal! Ezek után írasd ki a tömb elemeit a kimenetre. A megoldáskor ne használd ki, hogy tudod a tömb méretét!
    DECLARE
    	TYPE tomb_tipus IS TABLE OF int;
    	tomb tomb_tipus;
    	i int;
    BEGIN
    	tomb:=tomb_tipus();
    	FOR i IN 1..10 LOOP
    		 tomb.EXTEND;
    		 tomb(i):=i*2;
    	END LOOP;
    
    	i:=tomb.FIRST;
    	LOOP
    		EXIT WHEN i IS NULL;
    		DBMS_OUTPUT.put_line(tomb(i));
    		i:=tomb.NEXT(i);
    	END LOOP;
    END;
  4. Írj egy PL/SQL blokkot, ami kurzor használata nélkül az anyag tábla sorait kiírja a kimenetre!
    DECLARE
    	min_id int;
    	max_id int;
    	db int;
    	anyag_sor anyag%ROWTYPE;
    BEGIN
    	SELECT min(anyag_id) INTO min_id FROM anyag;
    	SELECT max(anyag_id) INTO max_id FROM anyag;
    	FOR i IN min_id..max_id LOOP
    		SELECT count(anyag_id) INTO db FROM anyag WHERE anyag_id=i;
    		IF db=1 THEN
    			SELECT * into anyag_sor FROM anyag WHERE anyag_id=i;
    			DBMS_OUTPUT.put_line(anyag_sor.anyag_id || ' ' || anyag_sor.anyag_nev);
    		END IF;
    	END LOOP;
    END;
  5. Oldd meg az előző feladatot explicit kurzor használatával! Hasonlítsa össze a két megoldást!
    DECLARE
    	CURSOR c IS SELECT anyag_id id, anyag_nev nev FROM anyag;
    BEGIN
    	FOR rec IN c LOOP
    		DBMS_OUTPUT.put_line(rec.id || ' ' || rec.nev);
    	END LOOP;
    END;
  6. Oldd meg az előző feladatot implicit kurzort használó kurzor for ciklussal!
    BEGIN
    	FOR rec IN (SELECT anyag_id, anyag_nev FROM anyag) LOOP
    		DBMS_OUTPUT.PUT_LINE(rec.anyag_id || ' ' || rec.anyag_nev);
    	END LOOP;
    END;
  7. Listázd ki, hogy a gyümölcstorta milyen összetevőkből áll. A lista tartalmazza az alapanyagokat, amiket közvetlen a tortához kell felhasználni, és a félkész termékeket. Minden félkész termékek alatt egy kis listában jelenjen meg, hogy az adott félkész termék milyen alapanyagokból tevődik össze. Az alapanyag neve mellett a mennyiséget és a mértékegységet is írasd ki. Minta:
    A Csokitorta osszetevoi:
    	porcukor(.02 kg)
    	tejszinhab
    		tejszin(4 dl)
    		cukor(.1 kg)
    	csoki krem
    		kakao(750 g)
    		tej(1 l)
    		cukor(.5 kg)
    	piskota
    		tojas(6 db)
    		liszt(.25 kg)
    		cukor(.06 kg)
    DECLARE
    	termeknev termek.termek_nev%TYPE := 'Gyumolcstorta';
    BEGIN
      DBMS_OUTPUT.put_line('A(z) ' || termeknev || ' összetevõi');
      FOR rec IN (
    	  SELECT anyag.anyag_nev, termek_anyag.ta_mennyiseg, egyseg.egyseg_nev
    	  FROM termek, termek_anyag, anyag, egyseg
    	  WHERE termek.termek_id = termek_anyag.ta_termekid AND
    		  anyag.anyag_id = termek_anyag.ta_anyagid AND
    		  egyseg.egyseg_id = anyag.anyag_egyseg AND
    		  termek.termek_nev = termeknev
      ) LOOP
    	  DBMS_OUTPUT.put_line('	' || rec.anyag_nev || ' (' || rec.ta_mennyiseg || 
    		  ' ' || rec.egyseg_nev || ')');
      END LOOP;
      
      FOR rec IN (
    	  SELECT felkesz.felkesz_id, felkesz.felkesz_nev
    	  FROM termek, termek_felkesz, felkesz
    	  WHERE termek.termek_id = termek_felkesz.tf_termekid AND
    		  felkesz.felkesz_id = termek_felkesz.tf_felkeszid AND
    		  termek.termek_nev = termeknev
    	 ) LOOP
    		 DBMS_OUTPUT.put_line('	' || rec.felkesz_nev);
    		 FOR rec2 IN (
    			 SELECT anyag.anyag_nev, felkesz_anyag.fa_mennyiseg, egyseg.egyseg_nev
    			 FROM felkesz, felkesz_anyag, anyag, egyseg
    			 WHERE felkesz.felkesz_id = felkesz_anyag.fa_felkeszid AND
    				 anyag.anyag_id = felkesz_anyag.fa_anyagid AND
    				 anyag.anyag_egyseg = egyseg.egyseg_id AND
    				 felkesz.felkesz_id = rec.felkesz_id
    		 ) LOOP
    			 DBMS_OUTPUT.put_line('		' || rec2.anyag_nev || ' (' || 
    				 rec2.fa_mennyiseg || ' ' || rec2.egyseg_nev || ')');
    		 END LOOP;
    	 END LOOP;		  
    END;
  8. Hozz létre egy struktúrát, ami félkész termékek receptjeinek tárolására szolgál. Hozz létre egy tömböt az összes félkész termék receptjeinek a tárolására, és töltsd fel adatokkal. Ellenőrzésképpen írasd ki a tömb tartalmát a kimenetre!

-- Peti - 2006.03.14.