<?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=Valaszthato_AdatbServerProgJegyzet20060317</id>
	<title>Valaszthato AdatbServerProgJegyzet20060317 - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Valaszthato_AdatbServerProgJegyzet20060317"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Valaszthato_AdatbServerProgJegyzet20060317&amp;action=history"/>
	<updated>2026-04-15T00:29:57Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Valaszthato_AdatbServerProgJegyzet20060317&amp;diff=163812&amp;oldid=prev</id>
		<title>2001:738:2001:2078:0:208:37:0: Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060317}}  &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=Valaszthato_AdatbServerProgJegyzet20060317&amp;diff=163812&amp;oldid=prev"/>
		<updated>2013-03-31T18:50:54Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060317}}  &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|AdatbServerProgJegyzet20060317}}&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; [[AdatbServerProgJegyzet20060314|&amp;amp;lt;&amp;amp;lt;]] Előadás, 2006.03.17. [[AdatbServerProgJegyzet20060321|&amp;amp;gt;&amp;amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Kivételek kezelése==&lt;br /&gt;
&lt;br /&gt;
===Kivétel típusok===&lt;br /&gt;
&lt;br /&gt;
* Rendszer kivételek&lt;br /&gt;
** Névvel ellátott kivételek (név, sorszám, üzenet)&lt;br /&gt;
** Név nélküli kivételek (sorszám, üzenet)&lt;br /&gt;
* Felhasználói kivételek&lt;br /&gt;
* Alkalmazás hibák&lt;br /&gt;
&lt;br /&gt;
====Névvel ellátott kivételek====&lt;br /&gt;
&lt;br /&gt;
* Kivétel lekezelése: &amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;DECLARE ...&lt;br /&gt;
&amp;lt;br/&amp;gt;BEGIN ...&lt;br /&gt;
&amp;lt;br/&amp;gt;EXCEPTION&lt;br /&gt;
&amp;lt;br/&amp;gt;	WHEN kivételnév [OR kivételnév2 [...]] THEN utasítások;&lt;br /&gt;
&amp;lt;br/&amp;gt;	WHEN OTHERS THEN utasítások;&lt;br /&gt;
&amp;lt;br/&amp;gt;END;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Az =OTHERS= blokknak a =EXCEPTION= blokk végére kell kerülnie.&lt;br /&gt;
* Gyakori, névvel ellátott kivételek:&lt;br /&gt;
** =NO_DATA_FOUND=&lt;br /&gt;
** =TOO_MANY_ROWS=&lt;br /&gt;
** =DUP_VAL_ON_INDEX=: olyan sort akarunk beszúrni, amivel megszegjük a kulcs vagy a =UNIQUE= oszlop egyediségére vonatkozó megkötést&lt;br /&gt;
** =VALUE_ERROR=: pl. =NULL= értéket akarunk beszúrni =NOT NULL= oszlopba&lt;br /&gt;
** =ZERO_DIVIDE=&lt;br /&gt;
** =CURSOR_ALREADY_OPEN=: kétszer nyitunk meg egy kurzort&lt;br /&gt;
** =INVALID_CURSOR=&lt;br /&gt;
** =CASE_NOT_FOUND=: a =CASE= utasítás szelektora egyik ágra sem illeszkedik&lt;br /&gt;
* A nevek a =STANDARD= csomagban vannak összegyűjtve. Nem kell deklarálni őket.&lt;br /&gt;
* Kivétel generálása: =RAISE NO_DATA_FOUND;=&lt;br /&gt;
&lt;br /&gt;
====Név nélküli rendszer kivételek====&lt;br /&gt;
* A =WHEN OTHERS= blokkban egyszerre elkaphatók&lt;br /&gt;
* Elnevezhetők a =PRAGMA= utasítás segítségével: &amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;DECLARE kivételnév EXCEPTION;&lt;br /&gt;
&amp;lt;br/&amp;gt;PRAGMA EXCEPTION_INIT(kivételnév, szám);&amp;lt;/code&amp;gt;&lt;br /&gt;
* Az előbbi módon a rendszer kivételnevek is felüldefiniálhatók. Az eredeti kivételre a =STANDARD= előtaggal hivatkozhatunk. Pl. =WHEN STANDARD.NO_DATA_FOUND THEN ...=&lt;br /&gt;
* Kivétel generálása: =RAISE kivételnév;=&lt;br /&gt;
&lt;br /&gt;
====Felhasználói kivételek====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Szintaktika:&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;DECLARE &lt;br /&gt;
	kivételnév EXCEPTION;&lt;br /&gt;
BEGIN&lt;br /&gt;
	...&lt;br /&gt;
	RAISE kivételnév;&lt;br /&gt;
	...&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	WHEN kivételnév THEN ...&lt;br /&gt;
END;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Alkalmazás hibák====&lt;br /&gt;
* Hiba kiváltása: =RAISE_APPLICATION_ERROR(hibakód, üzenet[, {FALSE|TRUE}])=&lt;br /&gt;
** hibakód: -20999 és -20000 közötti szám&lt;br /&gt;
** üzenet: =VARCHAR(2048)=&lt;br /&gt;
** A 3. paraméter =TRUE= értéke esetén a hiba a stackbe kerül, különben felülírja az előző hibát. A paraméter alapértelmezett értéke =FALSE=&lt;br /&gt;
&lt;br /&gt;
===Kivételek terjedése===&lt;br /&gt;
* A =DECLARE= és =BEGIN= között keletkezett hibát csak kívül lehet elkapni.&lt;br /&gt;
* Ugyanez igaz az =EXCEPTION= és az =END= között keletkezett kivételre is.&lt;br /&gt;
* A =BEGIN= és az =EXCEPTION= közötti kivétel az =EXCEPTION= blokkban lekezelhető. Ha itt nem történik meg, akkor a külső blokk =EXCEPTION= részébe terjed tovább.&lt;br /&gt;
* A belső blokkban lokálisan deklarált hibát a külső blokknak csak a =WHEN OTHERS= részében lehet elkapni, mert kívül nem látható a neve.&lt;br /&gt;
&lt;br /&gt;
===Hibakód és hibaüzenet===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Az =SQLCODE= illetve az =SQLERRM= függvényekkel kérdezhető le.&lt;br /&gt;
	&amp;lt;li&amp;gt; Ezek a függvények nek használhatók SQL utasítások belsejében, az értéküket először változóba kell kiolvasni.&lt;br /&gt;
	&amp;lt;li&amp;gt; Példa a hibák naplózására:&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;DECLARE&lt;br /&gt;
	hibakod INT;&lt;br /&gt;
	uzenet VARCHAR2(512);&lt;br /&gt;
BEGIN&lt;br /&gt;
	...&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	WHEN OTHERS THEN&lt;br /&gt;
		szam := SQLCODE;&lt;br /&gt;
		uzenet := SQLERRM;&lt;br /&gt;
		INSERT INTO naplo VALUES (szam, uzenet, sysdate);&lt;br /&gt;
END;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hibakódok====&lt;br /&gt;
* Belső kivétel: &amp;lt;0&lt;br /&gt;
* =NO_DATA_FOUND=: 100&lt;br /&gt;
* Felhasználói kivétel: 1&lt;br /&gt;
* Nincs hiba: 0&lt;br /&gt;
&lt;br /&gt;
====Hibaüzenetek====&lt;br /&gt;
* A rendszerüzenetek =VARCHAR2(512)= típusúak&lt;br /&gt;
* Felhasználói kivétel esetén a =&amp;#039;User Defined Exception&amp;#039;= üzenetet kapjuk&lt;br /&gt;
* Siker esetén =&amp;#039;ORA-0000&amp;#039;= az üzenet&lt;br /&gt;
&lt;br /&gt;
==Alprogramok==&lt;br /&gt;
&lt;br /&gt;
===Alprogramok típusai, terminológia===&lt;br /&gt;
&lt;br /&gt;
* Lehetnek eljárások vagy függvények&lt;br /&gt;
* Lehetnek tároltak vagy lokálisak&lt;br /&gt;
* Részei: deklaráció, kód, kivételkezelés&lt;br /&gt;
* _Formális paraméter_: a paraméter neve&lt;br /&gt;
* _Aktuális paraméter_: a paraméter értéke&lt;br /&gt;
&lt;br /&gt;
===Eljárások és függvények===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Eljárás deklarációja:&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;[CREATE [OR REPLACE]] PROCEDURE eljárásnév [(paraméterek)]&lt;br /&gt;
	[AUTHID {DEFINER|CURRENT_USER}]&lt;br /&gt;
{IS|AS}&lt;br /&gt;
	lokális deklaráció&lt;br /&gt;
BEGIN&lt;br /&gt;
	...&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	...&lt;br /&gt;
END [eljárásnév];&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Függvény deklarációja:&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;[CREATE [OR REPLACE]] FUNCTION függvénynév [(paraméterek)]&lt;br /&gt;
	RETURN típus&lt;br /&gt;
	[AUTHID {DEFINER|CURRENT_USER}]&lt;br /&gt;
{IS|AS}&lt;br /&gt;
	lokális deklaráció&lt;br /&gt;
BEGIN&lt;br /&gt;
	...&lt;br /&gt;
	RETURN érték;&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	...&lt;br /&gt;
END [függvénynév];&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Paraméter deklaráció: &lt;br /&gt;
&amp;lt;br/&amp;gt; =név [IN|OUT [NOCOPY]||IN OUT [NOCOPY]] típus [{:=DEFAULT} kifejezés]=&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Paraméter módok====&lt;br /&gt;
&lt;br /&gt;
* A típus nem tartalmazhat megkötést, mint pl. =VARCHAR2(50)=&lt;br /&gt;
* =IN=: alapértelmezett mód, eljáráson belül konstansként viselkedik, lehet default értéke&lt;br /&gt;
* =OUT=: változóként viselkedik, változóval kell meghívni. Hívás után &amp;lt;pre&amp;gt;NULL&amp;lt;/pre&amp;gt;-ra inicializálódik, ezért nem lehet =NOT NULL= megkötést tenni a típusra, különben =VALUE_ERROR= hibát kapunk.&lt;br /&gt;
* =OUT NOCOPY=: referenciaként adódik át a változó. Vigyáznunk kell, ha kivétel történik, mert inkonzisztens állapotban maradhat a változó értéke&lt;br /&gt;
* =IN OUT=: értékadás bal és jobb oldalán is állhat&lt;br /&gt;
&lt;br /&gt;
====Eljárás hívása====&lt;br /&gt;
&lt;br /&gt;
* =BEGIN= és =END= között =eljárásnév(paraméterek);=&lt;br /&gt;
* Command windowból =EXEC eljárásnév(paraméterek);=&lt;br /&gt;
* Paraméterek átadása&lt;br /&gt;
** A paraméter lehet konstans, változó vagy kifejezés&lt;br /&gt;
** Paraméterátadás pozíció alapján: &lt;br /&gt;
&amp;lt;br/&amp;gt; =eljárásnév(érték, ...);=&lt;br /&gt;
** Paraméterátadás név alapján: &lt;br /&gt;
&amp;lt;br/&amp;gt; =eljárásnév(formális paraméter=&amp;gt;aktuális paraméter, ...);=&lt;br /&gt;
** Kevert paraméterátadás: az első néhány paramétert pozíció alapján, a többit név alapján adjuk át.&lt;br /&gt;
* Függvényhívás történhet&lt;br /&gt;
** Kifejezés részeként&lt;br /&gt;
** =SELECT= belsejében, pl. =SELECT f(1) FROM DUAL;=. Ilyenkor a függvénynek SQL típussal kell visszatérnie, a boolean például tiltott.&lt;br /&gt;
&lt;br /&gt;
===Példák===&lt;br /&gt;
&lt;br /&gt;
====Tárolt eljárás hibakezeléssel====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE PROCEDURE anyag_beszur&lt;br /&gt;
	(azonosito INT, nev VARCHAR2, egyszegnev VARCHAR2)&lt;br /&gt;
IS&lt;br /&gt;
	egysegid INT;&lt;br /&gt;
BEGIN&lt;br /&gt;
	SELECT egyseg_id INTO egysegid FROM egyseg&lt;br /&gt;
		WHERE UPPER(egyseg_nev) = UPPER(egysegnev);&lt;br /&gt;
	INSERT INTO anyag(anyag_id, anyag_nev, anyag_egyseg)&lt;br /&gt;
		VALUES(azonosito, ne, egysegid);&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	WHEN NO_DATA_FOUND THEN&lt;br /&gt;
		RAISE_APPLICATION_ERROR(-20101, &amp;#039;Nincs ilyen egység&amp;#039;);&lt;br /&gt;
	WHEN DUP_VAL_ON_INDEX THEN&lt;br /&gt;
	BEGIN&lt;br /&gt;
		SELECT anya_id INTO aid FROM anyag&lt;br /&gt;
			WHERE UPPER(anyag_nev) = UPPER(nev);&lt;br /&gt;
		RAISE_APPLICATION_ERROR(-20102, &amp;#039;Az anyag létezik &amp;#039; ||| aid || &amp;#039; azonosítóval&amp;#039;);&lt;br /&gt;
	EXCEPTION&lt;br /&gt;
		WHEN NO_DATA_FOUND THEN&lt;br /&gt;
		  SELECT MAX(anyag_id)+1 INTO aid FROM anyag;&lt;br /&gt;
		  RAISE_APPLICATION_ERROR(-20103, &amp;#039;Dupla azonosító, ajánlott: &amp;#039; | aid&amp;#039;);&lt;br /&gt;
	END;&lt;br /&gt;
END anyag_beszur;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tárolt eljárás név nélküli hiba kezelésével====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE PROCEDURE recept_beszur&lt;br /&gt;
	(aid INT, fid INT, mennyiseg FLOAT)	 -- aid=anyag id, fid=félkész id&lt;br /&gt;
IS&lt;br /&gt;
	referencia EXCEPTION;&lt;br /&gt;
	PRAGMA EXCEPTION_INIT(referencia, -2291);&lt;br /&gt;
BEGIN&lt;br /&gt;
	INSERT INTO felkesz_anyag VALUES(aid, fid, mennyiseg);&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	WHEN referencia THEN&lt;br /&gt;
		RAISE ...	  -- itt még lehetne ellenőrizni, hogy melyik oszlop okozza&lt;br /&gt;
	WHEN DUP_VAL_ON_INDEX THEN&lt;br /&gt;
		RAISE ...&lt;br /&gt;
END;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tárolt függvény hibakezeléssel====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE FUNCTION pilota_pontszam(pid INT, fid INT)&lt;br /&gt;
	 RETURN INT&lt;br /&gt;
IS&lt;br /&gt;
	result INT;&lt;br /&gt;
	sorszam INT;&lt;br /&gt;
BEGIN&lt;br /&gt;
	SELECT helyezes [[INTo]] sorszam FROM futam_pilota&lt;br /&gt;
		WHERE futam_id=fid AND pilota_id=pid;&lt;br /&gt;
	CASE sorszam&lt;br /&gt;
		WHEN 1 THEN result:=10;&lt;br /&gt;
		WHEN 2 THEN result:=8;&lt;br /&gt;
		WHEN 3 THEN result:=6;&lt;br /&gt;
		...&lt;br /&gt;
		WHEN 8 THEN result:=1;&lt;br /&gt;
		ELSE result:=0;&lt;br /&gt;
	END CASE;&lt;br /&gt;
	RETURN result;&lt;br /&gt;
EXCEPTION&lt;br /&gt;
	WHEN NO_DATA_FOUND THEN&lt;br /&gt;
		RAISE ...&lt;br /&gt;
END;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tárolt eljárás hívása====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;SELECT nev, helyezes, pilota_pontszam(pilotaid, futamid) pont&lt;br /&gt;
	FROM futam_pilota NATURAL JOIN pilota&lt;br /&gt;
	WHERE futamid=51001&lt;br /&gt;
	ORDER BY helyezes, pont DESC;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A =WHERE= után nem lehet =pont= néven hivakozni a függvény eredményére, ki kell írni az egész függvényhívást.&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.03.17.&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>