<?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_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s%2C_2006.03.10.</id>
	<title>Adatbázisok szerver oldali programozása Előadás, 2006.03.10. - 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_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s%2C_2006.03.10."/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s,_2006.03.10.&amp;action=history"/>
	<updated>2026-04-15T00:28:58Z</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_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s,_2006.03.10.&amp;diff=163820&amp;oldid=prev</id>
		<title>2001:738:2001:2078:0:208:37:0: Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060310}}  &lt;!--  * Set DENYTOPICVIEW = TWikiGuest --&gt;   &lt;br/&gt; &amp;lt;&amp;lt; Előad…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s,_2006.03.10.&amp;diff=163820&amp;oldid=prev"/>
		<updated>2013-03-31T19:03:02Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060310}}  &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;br/&amp;gt; &lt;a href=&quot;/AdatbServerProgJegyzet20060307&quot; class=&quot;mw-redirect&quot; title=&quot;AdatbServerProgJegyzet20060307&quot;&gt;&amp;lt;&amp;lt;&lt;/a&gt; Előad…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060310}}&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;br/&amp;gt; [[AdatbServerProgJegyzet20060307|&amp;amp;lt;&amp;amp;lt;]] Előadás, 2006.03.10. [[AdatbServerProgJegyzet20060314|&amp;amp;gt;&amp;amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Kurzorok==&lt;br /&gt;
&lt;br /&gt;
A következő kód hibás, mert ha a =SELECT= nulla sorral tér vissza, exceptiont kapunk:&lt;br /&gt;
&amp;lt;pre&amp;gt;DECLARE&lt;br /&gt;
	myid INT:=3;&lt;br /&gt;
	nev VARCHAR(50);&lt;br /&gt;
BEGIN&lt;br /&gt;
	SELECT anyag_nev INTO nev FROM anyag WHERE anyag_id=myid;&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE(nev);&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egy tábla sorain kurzor segítségével lehet végiglépkedni.&lt;br /&gt;
&lt;br /&gt;
* Explicit kurzor: a programozó hozza létre&lt;br /&gt;
* Implicit kurzor: az Oracle hozza létre azokra a lekérdezésekre, amikre nincs explicit kurzor.&lt;br /&gt;
&lt;br /&gt;
===Kurzorok szintaktikája===&lt;br /&gt;
&lt;br /&gt;
* Kurzor deklarálása: =CURSOR kurzor_név [(param1, ...)] [RETURN visszatérési_típus] IS lekérdezés;= &lt;br /&gt;
&amp;lt;br/&amp;gt; A paraméterek láthatósága lokális.&lt;br /&gt;
* Kurzor megnyitása: =OPEN kurzor_név [(érték1, ...)];=&lt;br /&gt;
* Léptetés a következő sorra, és beolvasás: =FETCH kurzor_név INTO változó;= &lt;br /&gt;
&amp;lt;br/&amp;gt; A =FETCH= csak az =OPEN= és a =CLOSE= között használható.&lt;br /&gt;
* Összes sor kiolvasása egyszerre: =FETCH kurzor_név BULK COLLECT INTO tömb;=&lt;br /&gt;
* Kurzor bezárása: =CLOSE kurzornév;=&lt;br /&gt;
  &lt;br /&gt;
===Attribútumok===&lt;br /&gt;
&lt;br /&gt;
* =kurzor_név%ISOPEN=: true, ha a kurzor meg van nyitva.&lt;br /&gt;
* =kurzor_név%NOTFOUND=: false, ha az utolsó =FETCH= sorral tért vissza. Első =FETCH= előtt =NULL=.&lt;br /&gt;
* =kurzor_név%FOUND=: true, ha az utolsó =FETCH= sorral tért vissza. Első =FETCH= előtt =NULL=.&lt;br /&gt;
* =kurzor_név%ROWCOUNT=: a &amp;lt;pre&amp;gt;FETCH&amp;lt;/pre&amp;gt;-elt sorok száma. Első =FETCH= előtt 0.&lt;br /&gt;
* =kurzor_név%ROWTYPE=: a kurzorral fesorolható sorok típusa. Csak akkor kérdezhető le, ha a =RETURN= után megadtunk visszatérési típust.&lt;br /&gt;
&lt;br /&gt;
Az implicit kurzorok az utolsó SQL utasításról adnak információt. Az attribútmait az =SQL%attribútum_név= kifejezéssel lehet lekérdezni.&lt;br /&gt;
&lt;br /&gt;
* =SQL%ISOPEN=: mindig false.&lt;br /&gt;
* =SQL%NOTFOUND=: true, ha az utolsó =SELECT=, =INSERT=, =UPDATE= vagy =INSERT= 0 sort érintett.&lt;br /&gt;
* =SQL%FOUND=: false, ha az utolsó =SELECT=, =INSERT=, =UPDATE= vagy =INSERT= 0 sort érintett.&lt;br /&gt;
* =SQL%ROWCOUNT=: az utolsó SQL utasítás által érintett sorok száma.&lt;br /&gt;
&lt;br /&gt;
==Példák==&lt;br /&gt;
&lt;br /&gt;
===Felsorolás LOOP ciklussal===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DECLARE&lt;br /&gt;
	CURSOR c IS SELECT anyag_id, anyag_nev FROM anyag;&lt;br /&gt;
	id INT;&lt;br /&gt;
	nev anyag.anyag_nev%TYPE;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c;&lt;br /&gt;
	LOOP&lt;br /&gt;
		FETCH c INTO id, nev;&lt;br /&gt;
		EXIT WHEN c%NOTFOUND;&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(id || &amp;#039; &amp;#039; || nev);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Felsorolás FOR ciklussal===&lt;br /&gt;
&lt;br /&gt;
A FOR automatikusan megnyitja illetve lezárja a kurzort. A ciklusváltozót nem kell deklarálni, a típusa =kurzor%ROWTYPE= lesz.&lt;br /&gt;
&lt;br /&gt;
Szintaktika: =FOR rekord IN kurzor[(param1, ...)] LOOP= ... =END LOOP=;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DECLARE&lt;br /&gt;
	CURSOR c IS SELECT anyag_id id, anyag_nev nev FROM anyag;&lt;br /&gt;
BEGIN&lt;br /&gt;
	FOR crec IN c LOOP&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(crec.id || &amp;#039; &amp;#039; || crec.nev);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===BULK COLLECT===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DECLARE&lt;br /&gt;
	CURSOR c IS SELECT anyag_nev, anyag_id FROM anyag;&lt;br /&gt;
	TYPE nev_type IS TABLE OF anyag.anyag_nev%TYPE;&lt;br /&gt;
	TYPE id_type IS TABLE OF anyag.anyag_id%TYPE;&lt;br /&gt;
	nev_tomb nev_type;&lt;br /&gt;
	id_tomb id_type;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c;&lt;br /&gt;
	FETCH c BULK COLLECT INTO nev_tomb, id_tomb;&lt;br /&gt;
	CLOSE c;&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Implicit kurzor FOR ciklusban===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;BEGIN&lt;br /&gt;
	FOR crec IN (SELECT anyag_id, anyag_nev FROM anyag) LOOP&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(crec.anyag_id || &amp;#039; &amp;#039; || crec.anyag_nev);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rekord típusú kurzor===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DECLARE&lt;br /&gt;
	TYPE anyag_rec IS RECORD (id INT, nev VARCHAR2(50));&lt;br /&gt;
	CURSOR c RETURN anyag_rec IS&lt;br /&gt;
		SELECT anyag_id, anyag_nev FROM anyag;&lt;br /&gt;
	rec c%ROWTYPE;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c;&lt;br /&gt;
	LOOP&lt;br /&gt;
		FETCH c INTO rec;&lt;br /&gt;
		EXIT WHEN c1%NOTFOUND;&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(rec.anyag_id || &amp;#039; &amp;#039; || rec.anyag_nev);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Kurzor változók==&lt;br /&gt;
&lt;br /&gt;
Az eddig használt kurzorok konstansok voltak. &lt;br /&gt;
* A kurzor változóhoz dinamikusan lehet hozzákötni a lekérdezést. Megnyitáskor az előző értékeket elfelejti. Az újbóli megnyitás előtt nem szükséges lezárni.&lt;br /&gt;
* A kurzor változót is meg kell nyitni és be kell zárni. &lt;br /&gt;
* A =BULK COLLECT= használható rá, de a FOR ciklus nem.&lt;br /&gt;
* A =%ROWTYPE= attribútum csak akkor használható, ha a változónak deklaráltuk a visszatérési típusát.&lt;br /&gt;
&lt;br /&gt;
===Szintaktika===&lt;br /&gt;
&lt;br /&gt;
* Deklaráció: =TYPE típusnév IS REF CURSOR [RETURN visszatérési_típus];=&lt;br /&gt;
* Megnyitás: =OPEN {kurzor_változó | :host_kurzor_változó} FOR {lekérdezés  dinamikus string} [USING bind_argument1, ...];=&lt;br /&gt;
* Olvasás: =FETCH {kurzor_változó | :host_kurzor_változó} [BULK COLLECT] INTO változó1, ...=&lt;br /&gt;
&lt;br /&gt;
==Példák==&lt;br /&gt;
&lt;br /&gt;
===Egyszerű felsorolás===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DECLARE&lt;br /&gt;
	TYPE c_type IS REF CURSOR;&lt;br /&gt;
	c c_type;&lt;br /&gt;
	nev VARCHAR2(50);&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c FOR SELECT anyag_nev FROM anyag;&lt;br /&gt;
	LOOP&lt;br /&gt;
		FETCH c INTO nev;&lt;br /&gt;
		EXIT WHEN c%NOTFOUND;&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(nev);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	OPEN c FOR SELECT stud_lname FROM student&lt;br /&gt;
	LOOP&lt;br /&gt;
		FETCH c INTO nev;&lt;br /&gt;
		EXIT WHEN c%NOTFOUND;&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(nev);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	CLOSE c;&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Összetett lekérdezés===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DECLARE&lt;br /&gt;
	CURSOR c IS&lt;br /&gt;
		SELECT felkesz_nev, CURSOR(&lt;br /&gt;
			SELECT anyag_nev, fa_mennyiseg, egyseg_nev&lt;br /&gt;
			FROM anyag, felkesz_anyag, egyseg&lt;br /&gt;
			WHERE anyag_id=fa_anyagid AND fa_felkesz_id=f.felkesz_id AND egyseg_id=anyag_egyseg)&lt;br /&gt;
		FROM felkesz f ORDER BY felkesz_nev;&lt;br /&gt;
	TYPE refcursor IS REF CURSOR;&lt;br /&gt;
	nev VARCHAR2(100);&lt;br /&gt;
	TYPE anyagdatatype IS RECORD&lt;br /&gt;
		(nev VARCHAR2(100), mennyiseg FLOAT, egyseg VARCHAR2(20));&lt;br /&gt;
	anyagadat anyagdatatype;&lt;br /&gt;
	mycur refcursor;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c;&lt;br /&gt;
	LOOP&lt;br /&gt;
		FETCH c INTO nev, mycur;&lt;br /&gt;
		EXIT WHEN c%NOTFOUND;&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(&amp;#039;A &amp;#039; || nev || &amp;#039; összetevői:&amp;#039;);&lt;br /&gt;
		LOOP&lt;br /&gt;
			FETCH mycur INTO anyagadat;&lt;br /&gt;
			EXIT WHEN mycur%NOTFOUND;&lt;br /&gt;
			DBMS_OUTPUT.PUT_LINE(&lt;br /&gt;
				&amp;#039;  &amp;#039; || anyagadat.nev || &amp;#039; &amp;#039; || anyagadat.mennyiseg || &amp;#039; &amp;#039; || anyagadat.egyseg);&lt;br /&gt;
		END LOOP;&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	CLOSE c;&lt;br /&gt;
END;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.03.10.&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>