„Adatbázisok szerver oldali programozása” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
a
 
(Egy közbenső módosítás, amit egy másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060317}}
+
{{GlobalTemplate|Valaszthato|AdatbServerProg}}
  
<!--
 
* Set DENYTOPICVIEW = [[TWikiGuest]]
 
-->
 
  
<style>
+
Tantárgy adatlap:
code.pre { white-space: pre; display: block; margin-top: 2px; margin-bottom: 2px;}
+
* http://www.vdk.bme.hu/targykov/valaszthato/viau9159.htm
li { line-height: 18px; }
+
Tanszéki oldal:
</style>
+
* https://avalon.aut.bme.hu/~reni/aszp/ (jelszavas)
 +
* https://avalon.aut.bme.hu/~ivancsy/aszp.html
 +
* http://www.aut.bme.hu/Portal/Targy.aspx?courseId=06d4f149-7397-4e93-903b-0d52483c49ed
 +
Oktatók:  
 +
* Iváncsy Renáta (IB.153, 1668, reni@aut.bme.hu)
 +
* Dr. Iváncsy Szabolcs (csak a Neptun szerint tanít minket, a félév során kétszer láttam)
  
<br/> [[AdatbServerProgJegyzet20060314|&lt;&lt;]] Előadás, 2006.03.17. [[AdatbServerProgJegyzet20060321|&gt;&gt;]]
+
==Órai jegyzet==
  
__TOC__
+
===Bevezetés===
 +
* [[AdatbServerProgJegyzet20060217|Előadás, 2006.02.17.]] &mdash; 2 és n-rétegű architektúra, szerver oldali programozás, SQL szintaktika
  
==Kivételek kezelése==
+
===Oracle===
 +
* [[AdatbServerProgJegyzet20060221|Labor, 2006.02.21.]] &mdash; PL/SQL Developer alapok, Forma1 adatbázis létrehozása és feltöltése
 +
* [[AdatbServerProgJegyzet20060224|Előadás, 2006.02.24.]] &mdash; Oracle és Sql Server összehasonlítása, Oracle vezérlési szerkezetek
 +
* Labor, 2006.03.07. &mdash; Az ipari nyílt nap miatt elmaradt.
 +
* [[AdatbServerProgJegyzet20060303|Előadás, 2006.03.03.]] &mdash; adattípusok
 +
* [[AdatbServerProgJegyzet20060307|Labor, 2006.03.07.]] &mdash; <pre>SELECT</pre>-ek írása a cukrász adatbázishoz
 +
* [[AdatbServerProgJegyzet20060310|Előadás, 2006.03.10.]] &mdash; kurzorok
 +
* [[AdatbServerProgJegyzet20060314|Labor, 2006.03.14.]] &mdash; elágazások, ciklusok, kurzorok használata
 +
* [[AdatbServerProgJegyzet20060317|Előadás, 2006.03.17.]] &mdash; hibakezelés, tárolt eljárások és függvények
 +
* [[AdatbServerProgJegyzet20060321|Labor, 2006.03.21.]] &mdash; tárolt eljárások és hibakezelés (Formula 1 DB)
 +
* [[AdatbServerProgJegyzet20060324|Előadás, 2006.03.24.]] &mdash; triggerek
 +
* [[AdatbServerProgJegyzet20060328|Labor, 2006.03.28.]] &mdash; tárolt alprogramok és triggerek
 +
* [[AdatbServerProgJegyzet20060331|Előadás, 2006.03.31.]] &mdash; csomagok
 +
* [[AdatbServerProgJegyzet20060404|Labor, 2006.04.04.]] &mdash; Forma1 csomag írása
 +
* [[AdatbServerProgJegyzet20060407|Előadás, 2006.04.07.]] &mdash; tranzakciók
 +
* [[AdatbServerProgJegyzet20060411|Labor, 2006.04.11.]] &mdash; tranzakciók
 +
* [[AdatbServerProgJegyzet20060414|Előadás, 2006.04.14.]] &mdash; dinamikus SQL
 +
* [[AdatbServerProgJegyzet20060418|Labor, 2006.04.18.]] &mdash; dinamikus SQL, infó kinyerése rendszer táblákból
  
===Kivétel típusok===
+
===Microsoft SQL Server ===
 +
* [[AdatbServerProgJegyzet20060421|Előadás, 2006.04.21.]] &mdash; MS SQL bevezetés, =IDENTITY=, típusok, operátorok, vezérlési szerkezetek
 +
* [[AdatbServerProgJegyzet20060425|Labor, 2006.04.25.]] &mdash; SQL Management Studio, változók, dátumkezelés, =UPDATE OUTPUT=
 +
* [[AdatbServerProgJegyzet20060428|Előadás, 2006.04.28.]] &mdash; SQL-92 és T-SQL kurzor, kurzor ciklus, tárolt eljárások és függvények
 +
* [[AdatbServerProgJegyzet20060502|Labor, 2006.05.02.]] &mdash; kurzorok, tárolt eljárások, függvények, =CASE=
 +
* [[AdatbServerProgJegyzet20060505|Előadás, 2006.05.05.]] &mdash; DML és DDL triggerek, hibakezelés
 +
* [[AdatbServerProgJegyzet20060509|Labor, 2006.05.09.]] &mdash; triggerek, hibakezelés, nézetek, példa kliens progi kiegészítése
 +
* [[AdatbServerProgJegyzet20060512|Előadás, 2006.05.12.]] &mdash; dinamikus SQL, tranzakciók, XML (vetítős óra, XML nem vizsgaanyag)
 +
* [[AdatbServerProgJegyzet20060516|Labor, 2006.05.16.]] &mdash; egy 2003-as vizsgát végig oldottunk
 +
A jegyzetek Iváncsy Renáta kérésére csak bejelentkezés után elérhetők.
  
* Rendszer kivételek
+
==Minta adatbázisok==
** Névvel ellátott kivételek (név, sorszám, üzenet)
 
** Név nélküli kivételek (sorszám, üzenet)
 
* Felhasználói kivételek
 
* Alkalmazás hibák
 
  
====Névvel ellátott kivételek====
+
* Cukrász séma: https://avalon.aut.bme.hu/~reni/aszp/script/uj/sema/cukrasz_sema.pdf
 +
* Tanár-diák séma: https://avalon.aut.bme.hu/~reni/aszp/script/uj/sema/tanar_diak_sema.pdf
 +
* Forma-1 séma: https://avalon.aut.bme.hu/~reni/aszp/script/uj/sema/forma1_sema.pdf
 +
* Oracle és MS SQL scriptek (<pre>CREATE TABLE</pre> és <pre>INSERT</pre>): https://avalon.aut.bme.hu/~reni/aszp/script.html
 +
* Csatlakozás a tanszéki adatbázis szerverhez
 +
** Csanás: egyetemi VPN-nel tavaly (2005-ben) el lehetett érni
 +
** Chris: Oracle? szerver címe: deathstar.aut.bme.hu
  
* Kivétel lekezelése: <code class="pre">DECLARE ...
+
==Vizsga==
<br/>BEGIN ...
+
* 50 perc elmélet
<br/>EXCEPTION
+
** csak papírt használhatunk
<br/> WHEN kivételnév [OR kivételnév2 [...]] THEN utasítások;
+
** a feladat kidolgozásánál megválaszthatjuk a nyelvet
<br/> WHEN OTHERS THEN utasítások;
+
** példa elméleti kérdésre:
<br/>END;</code>
+
*** soroljunk fel 3 beépített csomagot
* Az =OTHERS= blokknak a =EXCEPTION= blokk végére kell kerülnie.
+
*** tranzakciók tulajdonságai (ACID)
* Gyakori, névvel ellátott kivételek:
+
** példa feladatra:
** =NO_DATA_FOUND=
+
*** írjunk tárolt eljárást kivételkezeléssel
** =TOO_MANY_ROWS=
+
* 90 perc gyakorlat
** =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
+
** bármi használható (jegyzet, net, stb.)
** =VALUE_ERROR=: pl. =NULL= értéket akarunk beszúrni =NOT NULL= oszlopba
+
** 4 feladat, 2 Oracle + 2 Microsoft SQL
** =ZERO_DIVIDE=
+
** az egyik Oracle feladat biztosan egy csomag írása
** =CURSOR_ALREADY_OPEN=: kétszer nyitunk meg egy kurzort
+
** a megoldást emailben kell beküldeni
** =INVALID_CURSOR=
+
* Elővizsga a 2006. tavaszi félévben utolsó héten pénteken.  
** =CASE_NOT_FOUND=: a =CASE= utasítás szelektora egyik ágra sem illeszkedik
+
<br/> Mivel idén összesen 4 jelentkező volt, megállapodtunk a szóbeli vizsgában, ami szerintem lényegesen egyszerűbb volt, mint ha a gépek előtt kellett volna görnyedni másfél órán keresztül. Szóbelin 1 nagyobb témakört kaptunk (én pl. az SQL Server triggereket), és másba nem is kérdeztek bele.
* A nevek a =STANDARD= csomagban vannak összegyűjtve. Nem kell deklarálni őket.
 
* Kivétel generálása: =RAISE NO_DATA_FOUND;=
 
  
====Név nélküli rendszer kivételek====
+
* 2008. őszi félév: Egy komplexebb tárolt eljárás megírása papíron, segédeszköz nélkül és egy elméleti kérdés kidolgozása, majd szóbeli vizsga az előzőek alapján. Szóval változott kicsit a számonkérés. -- [[AndrasGelanyi|giga]] - 2009.01.20.
* A =WHEN OTHERS= blokkban egyszerre elkaphatók
 
* Elnevezhetők a =PRAGMA= utasítás segítségével: <code class="pre">DECLARE kivételnév EXCEPTION;
 
<br/>PRAGMA EXCEPTION_INIT(kivételnév, szám);</code>
 
* 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 ...=
 
* Kivétel generálása: =RAISE kivételnév;=
 
  
====Felhasználói kivételek====
+
-- [[PallosPeter|Peti]] - 2006.05.18.
<ul>
 
<li>Szintaktika:
 
<code class="pre">DECLARE
 
kivételnév EXCEPTION;
 
BEGIN
 
...
 
RAISE kivételnév;
 
...
 
EXCEPTION
 
WHEN kivételnév THEN ...
 
END;</code>
 
</ul>
 
  
====Alkalmazás hibák====
+
* {{InLineFileLink|Valaszthato|AdatbServerProg|000_elmeleti_kerdesek.rtf|000_elmeleti_kerdesek.rtf}}: Elméleti kérdések kidolgozása
* Hiba kiváltása: =RAISE_APPLICATION_ERROR(hibakód, üzenet[, {FALSE|TRUE}])=
 
** hibakód: -20999 és -20000 közötti szám
 
** üzenet: =VARCHAR(2048)=
 
** 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=
 
 
 
===Kivételek terjedése===
 
* A =DECLARE= és =BEGIN= között keletkezett hibát csak kívül lehet elkapni.
 
* Ugyanez igaz az =EXCEPTION= és az =END= között keletkezett kivételre is.
 
* 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.
 
* 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.
 
 
 
===Hibakód és hibaüzenet===
 
 
 
<ul>
 
<li> Az =SQLCODE= illetve az =SQLERRM= függvényekkel kérdezhető le.
 
<li> 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.
 
<li> Példa a hibák naplózására:
 
<code class="pre">DECLARE
 
hibakod INT;
 
uzenet VARCHAR2(512);
 
BEGIN
 
...
 
EXCEPTION
 
WHEN OTHERS THEN
 
szam := SQLCODE;
 
uzenet := SQLERRM;
 
INSERT INTO naplo VALUES (szam, uzenet, sysdate);
 
END;</code>
 
</ul>
 
 
 
====Hibakódok====
 
* Belső kivétel: <0
 
* =NO_DATA_FOUND=: 100
 
* Felhasználói kivétel: 1
 
* Nincs hiba: 0
 
 
 
====Hibaüzenetek====
 
* A rendszerüzenetek =VARCHAR2(512)= típusúak
 
* Felhasználói kivétel esetén a ='User Defined Exception'= üzenetet kapjuk
 
* Siker esetén ='ORA-0000'= az üzenet
 
 
 
==Alprogramok==
 
 
 
===Alprogramok típusai, terminológia===
 
 
 
* Lehetnek eljárások vagy függvények
 
* Lehetnek tároltak vagy lokálisak
 
* Részei: deklaráció, kód, kivételkezelés
 
* _Formális paraméter_: a paraméter neve
 
* _Aktuális paraméter_: a paraméter értéke
 
 
 
===Eljárások és függvények===
 
 
 
<ul>
 
<li> Eljárás deklarációja:
 
<code class="pre">[CREATE [OR REPLACE]] PROCEDURE eljárásnév [(paraméterek)]
 
[AUTHID {DEFINER|CURRENT_USER}]
 
{IS|AS}
 
lokális deklaráció
 
BEGIN
 
...
 
EXCEPTION
 
...
 
END [eljárásnév];</code>
 
<li> Függvény deklarációja:
 
<code class="pre">[CREATE [OR REPLACE]] FUNCTION függvénynév [(paraméterek)]
 
RETURN típus
 
[AUTHID {DEFINER|CURRENT_USER}]
 
{IS|AS}
 
lokális deklaráció
 
BEGIN
 
...
 
RETURN érték;
 
EXCEPTION
 
...
 
END [függvénynév];</code>
 
<li>Paraméter deklaráció:  
 
<br/> =név [IN|OUT [NOCOPY]||IN OUT [NOCOPY]] típus [{:=DEFAULT} kifejezés]=
 
</ul>
 
 
 
====Paraméter módok====
 
 
 
* A típus nem tartalmazhat megkötést, mint pl. =VARCHAR2(50)=
 
* =IN=: alapértelmezett mód, eljáráson belül konstansként viselkedik, lehet default értéke
 
* =OUT=: változóként viselkedik, változóval kell meghívni. Hívás után <pre>NULL</pre>-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.
 
* =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
 
* =IN OUT=: értékadás bal és jobb oldalán is állhat
 
 
 
====Eljárás hívása====
 
 
 
* =BEGIN= és =END= között =eljárásnév(paraméterek);=
 
* Command windowból =EXEC eljárásnév(paraméterek);=
 
* Paraméterek átadása
 
** A paraméter lehet konstans, változó vagy kifejezés
 
** Paraméterátadás pozíció alapján:
 
<br/> =eljárásnév(érték, ...);=
 
** Paraméterátadás név alapján:
 
<br/> =eljárásnév(formális paraméter=>aktuális paraméter, ...);=
 
** 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.
 
* Függvényhívás történhet
 
** Kifejezés részeként
 
** =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.
 
 
 
===Példák===
 
 
 
====Tárolt eljárás hibakezeléssel====
 
 
 
<code class="pre">CREATE OR REPLACE PROCEDURE anyag_beszur
 
(azonosito INT, nev VARCHAR2, egyszegnev VARCHAR2)
 
IS
 
egysegid INT;
 
BEGIN
 
SELECT egyseg_id INTO egysegid FROM egyseg
 
WHERE UPPER(egyseg_nev) = UPPER(egysegnev);
 
INSERT INTO anyag(anyag_id, anyag_nev, anyag_egyseg)
 
VALUES(azonosito, ne, egysegid);
 
EXCEPTION
 
WHEN NO_DATA_FOUND THEN
 
RAISE_APPLICATION_ERROR(-20101, 'Nincs ilyen egység');
 
WHEN DUP_VAL_ON_INDEX THEN
 
BEGIN
 
SELECT anya_id INTO aid FROM anyag
 
WHERE UPPER(anyag_nev) = UPPER(nev);
 
RAISE_APPLICATION_ERROR(-20102, 'Az anyag létezik ' ||| aid || ' azonosítóval');
 
EXCEPTION
 
WHEN NO_DATA_FOUND THEN
 
  SELECT MAX(anyag_id)+1 INTO aid FROM anyag;
 
  RAISE_APPLICATION_ERROR(-20103, 'Dupla azonosító, ajánlott: ' | aid');
 
END;
 
END anyag_beszur;</code>
 
 
 
====Tárolt eljárás név nélküli hiba kezelésével====
 
 
 
<code class="pre">CREATE OR REPLACE PROCEDURE recept_beszur
 
(aid INT, fid INT, mennyiseg FLOAT) -- aid=anyag id, fid=félkész id
 
IS
 
referencia EXCEPTION;
 
PRAGMA EXCEPTION_INIT(referencia, -2291);
 
BEGIN
 
INSERT INTO felkesz_anyag VALUES(aid, fid, mennyiseg);
 
EXCEPTION
 
WHEN referencia THEN
 
RAISE ...   -- itt még lehetne ellenőrizni, hogy melyik oszlop okozza
 
WHEN DUP_VAL_ON_INDEX THEN
 
RAISE ...
 
END;</code>
 
 
 
====Tárolt függvény hibakezeléssel====
 
 
 
<code class="pre">CREATE OR REPLACE FUNCTION pilota_pontszam(pid INT, fid INT)
 
RETURN INT
 
IS
 
result INT;
 
sorszam INT;
 
BEGIN
 
SELECT helyezes [[INTo]] sorszam FROM futam_pilota
 
WHERE futam_id=fid AND pilota_id=pid;
 
CASE sorszam
 
WHEN 1 THEN result:=10;
 
WHEN 2 THEN result:=8;
 
WHEN 3 THEN result:=6;
 
...
 
WHEN 8 THEN result:=1;
 
ELSE result:=0;
 
END CASE;
 
RETURN result;
 
EXCEPTION
 
WHEN NO_DATA_FOUND THEN
 
RAISE ...
 
END;</code>
 
 
 
====Tárolt eljárás hívása====
 
 
 
<code class="pre">SELECT nev, helyezes, pilota_pontszam(pilotaid, futamid) pont
 
FROM futam_pilota NATURAL JOIN pilota
 
WHERE futamid=51001
 
ORDER BY helyezes, pont DESC;</code>
 
 
 
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.
 
 
 
-- [[PallosPeter|Peti]] - 2006.03.17.
 
  
 +
%META:FORM{name="ValaszthatoForm"}%
 +
%META:FIELD{name="Trgy" title="Tárgy" value="Adatbázisok szerver oldali programozása"}%
 +
%META:FIELD{name="Trgykd" title="Tárgykód" value="VIAU9159"}%
 +
%META:FIELD{name="Tanszk" title="Tanszék" value="AUT"}%
 +
%META:FIELD{name="Elad" title="Előadó" value="Iváncsy Renáta&#44; Dr. Iváncsy Szabolcs"}%
 +
%META:FIELD{name="Kreditszm" title="Kreditszám" value="5"}%
 +
%META:FIELD{name="raszm" title="Óraszám" value="4"}%
 +
%META:FIELD{name="Flv" title="Félév" value=""}%
 +
%META:FIELD{name="Terlet" title="Terület" value="Programozás"}%
 +
%META:FIELD{name="raijelenlt" title="Órai jelenlét" value="nem kötelező"}%
 +
%META:FIELD{name="Jegy" title="Jegy" value="vizsga "}%
 +
%META:FIELD{name="Elvrtmin.munka" title="Elvárt min. munka" value="bejárás"}%
 +
%META:FIELD{name="Minimumrajrjegy" title="Minimumra járó jegy" value=""}%
 +
%META:FIELD{name="Elvrtmax.munka" title="Elvárt max. munka" value="kis utánaolvasás - kis munka"}%
 +
%META:FIELD{name="Munkrajrjegy" title="Munkára járó jegy" value="5"}%
  
 
[[Category:Valaszthato]]
 
[[Category:Valaszthato]]
 +
[[Category:Archive]]

A lap jelenlegi, 2019. július 1., 21:20-kori változata

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

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


Tantárgy adatlap:

Tanszéki oldal:

Oktatók:

  • Iváncsy Renáta (IB.153, 1668, reni@aut.bme.hu)
  • Dr. Iváncsy Szabolcs (csak a Neptun szerint tanít minket, a félév során kétszer láttam)

Órai jegyzet

Bevezetés

Oracle

Microsoft SQL Server

A jegyzetek Iváncsy Renáta kérésére csak bejelentkezés után elérhetők.

Minta adatbázisok

Vizsga

  • 50 perc elmélet
    • csak papírt használhatunk
    • a feladat kidolgozásánál megválaszthatjuk a nyelvet
    • példa elméleti kérdésre:
      • soroljunk fel 3 beépített csomagot
      • tranzakciók tulajdonságai (ACID)
    • példa feladatra:
      • írjunk tárolt eljárást kivételkezeléssel
  • 90 perc gyakorlat
    • bármi használható (jegyzet, net, stb.)
    • 4 feladat, 2 Oracle + 2 Microsoft SQL
    • az egyik Oracle feladat biztosan egy csomag írása
    • a megoldást emailben kell beküldeni
  • Elővizsga a 2006. tavaszi félévben utolsó héten pénteken.


Mivel idén összesen 4 jelentkező volt, megállapodtunk a szóbeli vizsgában, ami szerintem lényegesen egyszerűbb volt, mint ha a gépek előtt kellett volna görnyedni másfél órán keresztül. Szóbelin 1 nagyobb témakört kaptunk (én pl. az SQL Server triggereket), és másba nem is kérdeztek bele.

  • 2008. őszi félév: Egy komplexebb tárolt eljárás megírása papíron, segédeszköz nélkül és egy elméleti kérdés kidolgozása, majd szóbeli vizsga az előzőek alapján. Szóval változott kicsit a számonkérés. -- giga - 2009.01.20.

-- Peti - 2006.05.18.

  • Ezen a helyen volt linkelve a(z) 000_elmeleti_kerdesek.rtf nevű fájl ("000_elmeleti_kerdesek.rtf" link szöveggel) a régi wiki http://wiki-old.sch.bme.hu/bin/view/Valaszthato/AdatbServerProg oldaláról. (Ha szükséged lenne a fájlra, akkor a pontos oldalmegnevezéssel együtt küldd el a wiki
    Hiba a bélyegkép létrehozásakor: Nem lehet a bélyegképet a célhelyre menteni
    @sch.bme.hu címre a kérésedet)
Elméleti kérdések kidolgozása

%META:FORM{name="ValaszthatoForm"}% %META:FIELD{name="Trgy" title="Tárgy" value="Adatbázisok szerver oldali programozása"}% %META:FIELD{name="Trgykd" title="Tárgykód" value="VIAU9159"}% %META:FIELD{name="Tanszk" title="Tanszék" value="AUT"}% %META:FIELD{name="Elad" title="Előadó" value="Iváncsy Renáta, Dr. Iváncsy Szabolcs"}% %META:FIELD{name="Kreditszm" title="Kreditszám" value="5"}% %META:FIELD{name="raszm" title="Óraszám" value="4"}% %META:FIELD{name="Flv" title="Félév" value=""}% %META:FIELD{name="Terlet" title="Terület" value="Programozás"}% %META:FIELD{name="raijelenlt" title="Órai jelenlét" value="nem kötelező"}% %META:FIELD{name="Jegy" title="Jegy" value="vizsga "}% %META:FIELD{name="Elvrtmin.munka" title="Elvárt min. munka" value="bejárás"}% %META:FIELD{name="Minimumrajrjegy" title="Minimumra járó jegy" value=""}% %META:FIELD{name="Elvrtmax.munka" title="Elvárt max. munka" value="kis utánaolvasás - kis munka"}% %META:FIELD{name="Munkrajrjegy" title="Munkára járó jegy" value="5"}%