<?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_Labor%2C_2006.05.09.</id>
	<title>Adatbázisok szerver oldali programozása Labor, 2006.05.09. - 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_Labor%2C_2006.05.09."/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_Labor,_2006.05.09.&amp;action=history"/>
	<updated>2026-05-16T17:52:17Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_Labor,_2006.05.09.&amp;diff=163856&amp;oldid=prev</id>
		<title>2001:738:2001:2078:0:208:37:0: Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060509}}  &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_szerver_oldali_programoz%C3%A1sa_Labor,_2006.05.09.&amp;diff=163856&amp;oldid=prev"/>
		<updated>2013-03-31T19:04:08Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060509}}  &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|AdatbServerProgJegyzet20060509}}&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; [[AdatbServerProgJegyzet20060505|&amp;amp;lt;&amp;amp;lt;]] Labor, 2006.05.09. [[AdatbServerProgJegyzet20060512|&amp;amp;gt;&amp;amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==T-SQL Triggerek, Kivételek==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Írj triggert, ami csak akkor enged felvenni egy kurzust egy hallgatónak, ha a limitnél&lt;br /&gt;
kevesebben jelentkeztek eddig rá! Tegyük fel, hogy csak kliens oldalról&lt;br /&gt;
engedélyezünk kurzus felvételt, így egyszerre biztosan egy sort szeretnénk beszúrni.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE TRIGGER courselimit ON student_course INSTEAD OF INSERT&lt;br /&gt;
AS&lt;br /&gt;
	DECLARE @limit INT, @studentcount INT&lt;br /&gt;
	SELECT @limit=cou_limit FROM course, inserted&lt;br /&gt;
		WHERE cou_id=inserted.sc_courseid&lt;br /&gt;
	SELECT @studentcount=COUNT(*) FROM student_course, inserted&lt;br /&gt;
		WHERE student_course.sc_courseid=inserted.sc_courseid&lt;br /&gt;
	IF (@studentcount&amp;lt;@limit)&lt;br /&gt;
		INSERT INTO student_course SELECT * FROM inserted&lt;br /&gt;
	ELSE&lt;br /&gt;
		RAISERROR(&amp;#039;kurzus betelt&amp;#039;, 10, 1)&lt;br /&gt;
GO&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tesztelés:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;UPDATE course SET cou_limit=10 WHERE cou_id=6&lt;br /&gt;
INSERT INTO student_course (sc_studentid, sc_courseid, sc_date)&lt;br /&gt;
	VALUES (&amp;#039;SDFQWE&amp;#039;, 6, getdate())&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Oldd meg az előző feladatot úgy, hogy feltesszük, hogy egyszerre több sort is be&lt;br /&gt;
tudunk szúrni a táblába!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE TRIGGER courselimit ON student_course INSTEAD OF INSERT&lt;br /&gt;
AS&lt;br /&gt;
	SET NOCOUNT ON&lt;br /&gt;
	DECLARE @limit INT, @studentcount INT&lt;br /&gt;
	DECLARE @studentid CHAR(6), @courseid INT, @date DATETIME&lt;br /&gt;
	DECLARE cc CURSOR FOR&lt;br /&gt;
		SELECT * FROM inserted&lt;br /&gt;
	OPEN cc&lt;br /&gt;
	FETCH cc INTO @studentid, @courseid, @date&lt;br /&gt;
	WHILE @@FETCH_STATUS=0&lt;br /&gt;
	BEGIN&lt;br /&gt;
		SELECT @limit=cou_limit FROM course WHERE cou_id=@courseid&lt;br /&gt;
		SELECT @studentcount=COUNT(*) FROM student_course&lt;br /&gt;
			WHERE sc_courseid=@courseid&lt;br /&gt;
		IF @studentcount&amp;lt;@limit&lt;br /&gt;
		BEGIN&lt;br /&gt;
			INSERT INTO student_course VALUES (@studentid, @courseid, @date)&lt;br /&gt;
			print @studentid + &amp;#039; jelentkezett a &amp;#039; + convert(VARCHAR, @courseid) + &amp;#039; kurzusra&amp;#039;&lt;br /&gt;
		END ELSE&lt;br /&gt;
			print @studentid + &amp;#039; nem fért bele a &amp;#039; + convert(VARCHAR, @courseid) + &amp;#039; kurzusba&amp;#039;&lt;br /&gt;
		FETCH cc INTO @studentid, @courseid, @date&lt;br /&gt;
	END&lt;br /&gt;
	CLOSE cp&lt;br /&gt;
	DEALLOCATE cp&lt;br /&gt;
GO&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tesztelés:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;UPDATE course SET cou_limit=10 WHERE cou_id=6&lt;br /&gt;
DELETE FROM student_course WHERE sc_courseid=6&lt;br /&gt;
INSERT INTO student_course SELECT stud_id, 6, getdate() FROM student&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Írj tárolt eljárást, amivel egy diák egy kurzusra tud jelentkezni. Az eljárás bemenő&lt;br /&gt;
paramétere a diák neptun kódja, a szemeszter kód és a tárgy kódja legyen. Az&lt;br /&gt;
eljáráson belül kapd el a hibákat, és írasd ki, hogy mi volt a hiba! Próbáld ki az&lt;br /&gt;
eljárást különböző hibákat generálva!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE PROCEDURE targyjelentkezes&lt;br /&gt;
	@student CHAR(6),&lt;br /&gt;
	@subject CHAR(8),&lt;br /&gt;
	@semester CHAR(5),&lt;br /&gt;
	@coursenumber INT&lt;br /&gt;
AS&lt;br /&gt;
	SET NOCOUNT ON&lt;br /&gt;
	BEGIN TRY&lt;br /&gt;
		INSERT INTO student_course &lt;br /&gt;
			SELECT @student, cou_id, getdate() FROM course &lt;br /&gt;
				WHERE @subject=cou_subjectid&lt;br /&gt;
				AND @semester=cou_semestername&lt;br /&gt;
				AND @coursenumber=cou_coursenumber&lt;br /&gt;
		IF @@rowcount=0&lt;br /&gt;
			RAISERROR(&amp;#039;nincs ilyen kurzus&amp;#039;, 10, 1)&lt;br /&gt;
	END TRY&lt;br /&gt;
	BEGIN CATCH&lt;br /&gt;
		IF @@ERROR=0&lt;br /&gt;
			print &amp;#039;ok&amp;#039;&lt;br /&gt;
		ELSE IF ERROR_NUMBER()=2627&lt;br /&gt;
			print &amp;#039;többszörös jelentkezés&amp;#039;&lt;br /&gt;
		ELSE BEGIN&lt;br /&gt;
			print &amp;#039;egyéb hiba&amp;#039;&lt;br /&gt;
			print ERROR_NUMBER()&lt;br /&gt;
			print ERROR_MESSAGE()&lt;br /&gt;
		END&lt;br /&gt;
	END CATCH&lt;br /&gt;
GO&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tesztelés:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;EXEC targyjelentkezes &amp;#039;XSFXCF&amp;#039;, &amp;#039;VIFO1016&amp;#039;, &amp;#039;20012&amp;#039;, 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Készíts egy nézetet, ami a következ- nev2 oszlopokat tartalmazza: név, mennyiseg,&lt;br /&gt;
egység, ár! Az egység a nézetben ne kóddal jelenjen meg, hanem megnevezéssel! Az&lt;br /&gt;
ár származtatott értékként kerüljön kiszámításra a nézeten belül. Írj triggert, aminek&lt;br /&gt;
segítségével új félkész terméket lehet felvenni az adatbázisba a létrehozott nézeten&lt;br /&gt;
keresztül! Amennyiben a beadott egység még nem szerepel az egység táblában, úgy&lt;br /&gt;
az kerüljön felvételre. A beadott ár értéket ignoráld, mivel az ár egy származtatott&lt;br /&gt;
érték!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; A VIAU9159 nev2 C# project MainClien.exe futtatható kódja egy korlátozott&lt;br /&gt;
funkcionalitásokkal bíró kliens felületet nyújt a tanár-diák adatbázishoz. A feladat a&lt;br /&gt;
kliens által meghívott tárolt eljárások megírása, aminek következtében a programot&lt;br /&gt;
lehet használni.&lt;br /&gt;
&lt;br /&gt;
A program m2ködése:&lt;br /&gt;
&lt;br /&gt;
A program segítségével a különböz- diákokhoz tárgyakat lehet felvenni, illetve&lt;br /&gt;
leadni.&lt;br /&gt;
A belépéskor a felhasználói név és a jelszó megadása után megjelenik egy felület, ami&lt;br /&gt;
különböz- listákat tartalmaz.&lt;br /&gt;
A bal oldali lista a diákok listája. Ennek feltöltésére a program a getStudents&lt;br /&gt;
tárolt eljárást hívja meg. A tárolt eljárás visszatérése egy adathalmaz, aminek az els-&lt;br /&gt;
oszlopában a diák azonosítója áll, a másodikban pedig az, amit meg szeretnénk&lt;br /&gt;
jeleníteni a listában.&lt;br /&gt;
&lt;br /&gt;
A félév kódja legördül- menü feltöltéséhez a getSemesters tárolt eljárást kell&lt;br /&gt;
meghívni. Ennek is a visszatér- adathalmazának els- oszlopa tartalmazza a&lt;br /&gt;
szemeszter kódját, a második oszlop pedig a megjelenítend- szöveget. Itt érdemes&lt;br /&gt;
használni az el-z- gyakorlatok egyikén megírt szemeszter név konvertáló függvényt.&lt;br /&gt;
Ha kiválasztunk egy szemesztert, az adott szemeszterhez az alsó listában felsorolásra&lt;br /&gt;
kerülnek az adott szemeszter kurzusai. Ezt a getCoursesOfSemester&lt;br /&gt;
@semester char(5) tárolt eljárás hívásával lehet megtenni. Az eljárás, mint az&lt;br /&gt;
eddigiek két oszloppal tér vissza. Az els-ben a kurzus azonosítója áll, a másodikban a&lt;br /&gt;
megjelenítend- szöveg. Itt érdemes a tárgy kódját, a tárgy nevét, a kurzus típusát&lt;br /&gt;
(el-adás, gyakorlat vagy labor a CASE függvény használatával), tárgyért felel-s tanár&lt;br /&gt;
nevét kiíratni.&lt;br /&gt;
&lt;br /&gt;
A legfels- listában a kiválasztott diák által az adott félévben felvett kurzusok&lt;br /&gt;
szerepelnek. Ezt a getStudentsCourses @studid char(6), @semester&lt;br /&gt;
char(5) tárolt eljárás hívásával lehet megoldani. Az eljárás azonos módon kell,&lt;br /&gt;
hogy visszaadja az adatokat, mint a kurzust listázó eljárás.&lt;br /&gt;
A jelentkezik gomb megnyomásakor a kiválasztott hallgatóhoz felvételre kerül a&lt;br /&gt;
kiválasztott kurzus. Ezt az addCourseToStudent @studid char(6),&lt;br /&gt;
@couid int eljárás hívásával lehet megtenni. Az eljárásnak le kell ellen-riznie,&lt;br /&gt;
hogy még befér-e a hallgató az adott kurzusra. Ha igen, fel kell venni, ha nem, akkor&lt;br /&gt;
egy hibát kell generálni a kliens felé. Ügyelj a tranzakció kezelésre is!&lt;br /&gt;
A lead gombbal a kiválasztott hallgató kiválasztott kurzusát lehet törölni a listából.&lt;br /&gt;
Ezt a deleteCourseFromStudent @studid char(6), @couid int&lt;br /&gt;
tárolt eljárással lehet megtenni.&lt;br /&gt;
&lt;br /&gt;
Írd meg a szövegben megjelölt tárolt eljárásokat! Ügyelj a tranzakció kezelésre és a&lt;br /&gt;
hiba kezelésre! Hibát a RAISERROR függvénnyel lehet dobni a kliens felé (a&lt;br /&gt;
részleteket nézd meg a helpben!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Módosítsd úgy a szemeszter kurzusainak listáját listázó tárolt eljárást, hogy&lt;br /&gt;
tartalmazza a kurzus létszámkorlátját, és a jelentkezettek számát is!&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.05.09.&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>