<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Adatb%C3%A1zisok_szerveroldali_programoz%C3%A1sa_Labor%2C_2006.04.04.</id>
	<title>Adatbázisok szerveroldali programozása Labor, 2006.04.04. - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Adatb%C3%A1zisok_szerveroldali_programoz%C3%A1sa_Labor%2C_2006.04.04."/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerveroldali_programoz%C3%A1sa_Labor,_2006.04.04.&amp;action=history"/>
	<updated>2026-04-14T23:12:48Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerveroldali_programoz%C3%A1sa_Labor,_2006.04.04.&amp;diff=163840&amp;oldid=prev</id>
		<title>2001:738:2001:2078:0:208:37:0: Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060404}}  &lt;!--  * Set DENYTOPICVIEW = TWikiGuest --&gt;   &lt;style&gt;  	code.pre { white-space: pre; display: block; m…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerveroldali_programoz%C3%A1sa_Labor,_2006.04.04.&amp;diff=163840&amp;oldid=prev"/>
		<updated>2013-03-31T19:03:37Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060404}}  &amp;lt;!--  * Set DENYTOPICVIEW = &lt;a href=&quot;/index.php?title=TWikiGuest&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;TWikiGuest (a lap nem létezik)&quot;&gt;TWikiGuest&lt;/a&gt; --&amp;gt;   &amp;lt;style&amp;gt;  	code.pre { white-space: pre; display: block; m…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060404}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
* Set DENYTOPICVIEW = [[TWikiGuest]]&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt; &lt;br /&gt;
	code.pre { white-space: pre; display: block; margin-top: 2px; margin-bottom: 2px; }&lt;br /&gt;
	li { line-height: 18px; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; [[AdatbServerProgJegyzet20060331|&amp;amp;lt;&amp;amp;lt;]] Labor, 2006.04.04. [[AdatbServerProgJegyzet20060407|&amp;amp;gt;&amp;amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==PL/SQL Csomagok==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Készíts el egy csomagot a Forma-1-es adatbázis különböző műveleteinek egységbe&lt;br /&gt;
zárására! Készíts eljárásokat, amiknek segítségével új csapatot, új szezont és új pilótát lehet felvenni. Definiálj globális kivételeket a különböző, az eljárások során fellépő kivételekhez (Hibás bemeneti paraméter, már létező csapat/szezon/pilóta stb.)!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Csomag deklaráció&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE PACKAGE forma1_insert is&lt;br /&gt;
	csapatletezik EXCEPTION;&lt;br /&gt;
	csapatnevhianyzik EXCEPTION;&lt;br /&gt;
	PROCEDURE ujcsapat(csnev VARCHAR2, csszekhely VARCHAR2);&lt;br /&gt;
END forma1_insert;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Csomag törzs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE PACKAGE BODY forma1_insert IS&lt;br /&gt;
	PROCEDURE ujcsapat(csnev VARCHAR2, csszekhely VARCHAR2) IS&lt;br /&gt;
		id INT;&lt;br /&gt;
		db INT;&lt;br /&gt;
	BEGIN&lt;br /&gt;
		IF csnev IS NULL THEN&lt;br /&gt;
			RAISE csapatnevhianyzik;&lt;br /&gt;
		END IF;&lt;br /&gt;
		SELECT count(csapatid) INTO db FROM csapat WHERE nev=csnev OR szekhely=csszekhely;&lt;br /&gt;
		IF db&amp;gt;0 THEN&lt;br /&gt;
			RAISE csapatletezik;&lt;br /&gt;
		END IF;&lt;br /&gt;
		SELECT NVL(MAX(csapatid),0)+1 INTO id FROM csapat;&lt;br /&gt;
		INSERT INTO csapat VALUES(id, csnev, csszekhely);&lt;br /&gt;
	END;&lt;br /&gt;
END forma1_insert;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Írj egy blokkot, ami kipróbálja a csomag egyes eljárásait! A blokkon belül kapd el az&lt;br /&gt;
esetlegesen fellépő csomagbeli kivételeket, és értesítsd az eseményről a kliens oldalt&lt;br /&gt;
(alkalmazás hiba dobása megfelelő hibaüzenettel).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
	forma1_insert.ujcsapat(&amp;#039;1&amp;#039;, &amp;#039;x&amp;#039;);&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	WHEN forma1_insert.csapatletezik THEN&lt;br /&gt;
		DBMS_OUTPUT.put_line(&amp;#039;Csapatnév már létezik&amp;#039;);&lt;br /&gt;
	WHEN forma1_insert.csapatnevhianyzik THEN&lt;br /&gt;
		DBMS_OUTPUT.put_line(&amp;#039;Csapatnév nincs megadva&amp;#039;);&lt;br /&gt;
END;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Egészítsd ki a forma1-es csomagot az alábbi funkciókkal. Egy eljárást kell&lt;br /&gt;
elkészítened, aminek bemenő paramétereként egy csapat összetételét kell megadni&lt;br /&gt;
(szezon, csapatnév, pilóták neve típussal) az eljáráson belül pedig az adott szezonba&lt;br /&gt;
az adott csapathoz a megadott pilóták kerülnek felvételre. Amennyiben a csapat az&lt;br /&gt;
adott szezonban még nem létezik, akkor az eljárás felvesz egy új bejegyzést a&lt;br /&gt;
CSAPAT_SZEZON táblába, de egy hibaüzenettel jelzi, hogy hiányos adatokkal&lt;br /&gt;
dolgozott. Hozz létre egy rekord típust, ami az eljárás bemenete lesz, és hozd létre az&lt;br /&gt;
eljárást is!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE PACKAGE forma1_insert IS&lt;br /&gt;
	csapatletezik EXCEPTION;&lt;br /&gt;
	csapatnevhianyzik EXCEPTION;&lt;br /&gt;
	csapatnemletezik EXCEPTION;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
	TYPE pilotalista IS TABLE OF csapat.nev%TYPE;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
	PROCEDURE ujcsapat(csnev VARCHAR2, csszekhely VARCHAR2);&lt;br /&gt;
	PROCEDURE csapatot_feltolt(szezon INT, csnev VARCHAR2,&lt;br /&gt;
		pilota1 VARCHAR2, pilota2 VARCHAR2, pilotat pilotalista);&lt;br /&gt;
END forma1_insert;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE PACKAGE BODY forma1_insert is&lt;br /&gt;
	FUNCTION get_csapatid(csapatnev VARCHAR2) RETURN INT IS&lt;br /&gt;
		result INT;&lt;br /&gt;
	BEGIN&lt;br /&gt;
		SELECT csapatid INTO result FROM csapat WHERE nev=csapatnev;&lt;br /&gt;
		RETURN result;&lt;br /&gt;
	EXCEPTION&lt;br /&gt;
		WHEN NO_DATA_FOUND THEN&lt;br /&gt;
		  RETURN NULL;&lt;br /&gt;
	END;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
	-- megkeres vagy beszúr egy pilótát, és visszaadja az id-jét&lt;br /&gt;
	FUNCTION get_pilotaid(pnev VARCHAR2) RETURN INT IS&lt;br /&gt;
		result INT;&lt;br /&gt;
	BEGIN&lt;br /&gt;
		SELECT pilotaid INTO result FROM pilota WHERE nev=pnev;&lt;br /&gt;
		RETURN result;&lt;br /&gt;
	EXCEPTION&lt;br /&gt;
		WHEN NO_DATA_FOUND THEN&lt;br /&gt;
			SELECT NVL(MAX(pilotaid),0)+1 INTO result FROM pilota;&lt;br /&gt;
			INSERT INTO pilota(pilotaid, nev) VALUES(result, pnev);&lt;br /&gt;
			RETURN result;&lt;br /&gt;
	END;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
	PROCEDURE csapatot_feltolt(szezon INT, csnev VARCHAR2,&lt;br /&gt;
		pilota1 VARCHAR2, pilota2 VARCHAR2, pilotat pilotalista)&lt;br /&gt;
	IS&lt;br /&gt;
		csid INT;&lt;br /&gt;
		csszid INT;&lt;br /&gt;
		pid INT;&lt;br /&gt;
		i INT;&lt;br /&gt;
	BEGIN&lt;br /&gt;
		csid := get_csapatid(csnev);&lt;br /&gt;
		SELECT NVL(MAX(csapatszezonid),0)+1 INTO csszid FROM csapat_szezon;&lt;br /&gt;
		INSERT INTO csapat_szezon(csapatszezonid, csapatid, ev)&lt;br /&gt;
			VALUES(csid, csszid, szezon);&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
		pid := get_pilotaid(pilota1);&lt;br /&gt;
		INSERT INTO csapat_pilota VALUES(csszid, pid, &amp;#039;1&amp;#039;);&lt;br /&gt;
		pid := get_pilotaid(pilota2);&lt;br /&gt;
		INSERT INTO csapat_pilota VALUES(csszid, pid, &amp;#039;2&amp;#039;);&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
		i := pilotat.FIRST;&lt;br /&gt;
		WHILE i IS NOT NULL LOOP&lt;br /&gt;
			pid := get_pilotaid(pilotat(i));&lt;br /&gt;
			INSERT INTO csapat_pilota VALUES(csszid, pid, &amp;#039;2&amp;#039;);&lt;br /&gt;
			i := pilotat.NEXT(i);&lt;br /&gt;
		END LOOP;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
		IF csid IS NULL THEN&lt;br /&gt;
			RAISE csapatnemletezik;&lt;br /&gt;
		END IF;&lt;br /&gt;
	END;&lt;br /&gt;
END forma1_insert;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Készíts egy blokkot, ami létrehoz egy csapat összeállítást, ás az előző feladatban&lt;br /&gt;
létrehozott eljárást hívja meg. Amennyiben az eljárás hiányos adat hibával tér vissza,&lt;br /&gt;
a csapat szezonális adatait is vidd be a blokkon belül!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Egészítsd ki a forma1-es csomagot egy eljárással, aminek két bemenő paramétere egy&lt;br /&gt;
csapat neve és egy szezon, egy kimenő paramétere pedig egy REF CURSOR típusú&lt;br /&gt;
változó, amibe az adott csapat adott évben futott versenyzőinek eredményét&lt;br /&gt;
tartalmazza.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Készíts blokkot, ami meghívja az előző feladatban megírt eljárást, és a kimenetre&lt;br /&gt;
(DBMS_OUTPUT.PUT_LINE) kiírja az eredméyt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Készíts el egy csomagot a cukrász adatbázisbeli műveletek egységbe zárása céljából!&lt;br /&gt;
A csomag tartalmazzon két eljárást. Az egyik eljárás tegye lehetővé különböző&lt;br /&gt;
alapanyagok, félkészek vagy termékek felvételét az adatbázisba. Az eljárás&lt;br /&gt;
paraméterei közt szerepeljen az adat típusa, és ezek alapján az eljárás szúrja be a&lt;br /&gt;
megfelelő táblába az adatokat. Az azonosítót szekvenciával generáljad! A második&lt;br /&gt;
eljárás tegye lehetővé félkész termékek receptjét összeállítani, magyarul a két&lt;br /&gt;
bemeneti paramétere egy anyag és egy félkész neve legyen, valamint az anyag&lt;br /&gt;
mennyisége. Próbáld ki a csomagot egy teszt blokk segítségével. Ellenőrizd, hogy jól&lt;br /&gt;
működnek-e az eljárások.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Egészítsd ki a cukrász csomagot a következők szerint. A csomag tartalmazzon egy&lt;br /&gt;
eljárást, aminek egy kimenő paramétere van, ami a még nem teljesített rendeléseket&lt;br /&gt;
tartalmazza. (Feltételezzük, hogy van egy rendelés tábla, ha nincs, hozd azt létre!) A&lt;br /&gt;
kimenet egy rekordokból álló tömb legyen, amely tartalmazza a rendelés azonosítóját,&lt;br /&gt;
az áru nevét, típusát, mennyiségét, a rendelés dátumát valamint a forintban és euróban&lt;br /&gt;
vett árát. Az euró árfolyamát a csomagon belül egy változóban tároljuk, és az első&lt;br /&gt;
használatkor kerül meghatározásra.&lt;br /&gt;
* Tervezd meg a csomag részeit (globális és lokális függvények, eljárások, globális és lokális típusok, inicializáló paraméter.) Alapértelmezésben az euró árfolyamát konstans értékre állítsuk be!&lt;br /&gt;
* Valósítsd meg az egyes eljárásokat és függvényeket, és egy teszt blokk segítségével próbáld is ki a csomagot!&lt;br /&gt;
* Készíts egy függvényt, ami véletlen módon határozza meg az euró árfolyamát, ahol az euró alap árfolyama legyen 240,15 Ft, és a véletlen ingadozás legyen 0-20 között.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Az előadáson ismertetett jogosultság ellenőrző rendszert valósítsd meg. A feladat a&lt;br /&gt;
következő volt:&lt;br /&gt;
&lt;br /&gt;
A tanár-diák adatbázisban a diákok nyilvántartására nem célszerű létrehozni annyi&lt;br /&gt;
Oracle felhasználót, amennyi diák van. Helyette a STUDENT táblában tároljuk el az&lt;br /&gt;
egyes diákok azonosítóit és jelszavait, és mindenki egységesen ugyanazzal az Oracle&lt;br /&gt;
felhasználóval léphet be. Létre kell ezért hozni egy mechanizmust, ami biztosítja,&lt;br /&gt;
hogy egy diák csak akkor tudjon különböző műveleteket végrehajtani az&lt;br /&gt;
adatbázisban, ha valóban belépett. Készíts egy csomagot, aminek változójában el&lt;br /&gt;
tudjuk tárolni, hogy egy adott diák belépett-e vagy sem! Írd meg a belépő eljárást, és&lt;br /&gt;
a belépést ellenőrző függvényt!&lt;br /&gt;
&lt;br /&gt;
Írj triggert, ami csak akkor enged adatmódosító utasítást lefuttatni a vizsga&lt;br /&gt;
jelentkezés táblán, ha a diák belépett a rendszerbe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Módosítsd az előző feladatban megírt csomagot úgy, hogy a tanárok jogosultságait is&lt;br /&gt;
tudja kezelni. Egy vizsgát csak egy tanári jogosultsággal rendelkező felhasználó&lt;br /&gt;
írhasson ki, míg egy vizsgára diák is vagy akár tanár is jelentkezhessen. A diák&lt;br /&gt;
adatait pl. E-mail cím vagy jelszó, csak az adott diák tudja módosítani! Írd meg hozzá a szükséges triggereket vagy tárol eljárásokat!&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.04.04.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Valaszthato]]&lt;/div&gt;</summary>
		<author><name>2001:738:2001:2078:0:208:37:0</name></author>
	</entry>
</feed>