<?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.24.</id>
	<title>Adatbázisok szerver oldali programozása Előadás, 2006.03.24. - 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.24."/>
	<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.24.&amp;action=history"/>
	<updated>2026-05-16T18:02:02Z</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_El%C5%91ad%C3%A1s,_2006.03.24.&amp;diff=163836&amp;oldid=prev</id>
		<title>2001:738:2001:2078:0:208:37:0: Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060324}}  &lt;!--  * Set DENYTOPICVIEW = TWikiGuest --&gt;   &lt;style&gt;  	code.pre { white-space: pre; display:block; me…”</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.24.&amp;diff=163836&amp;oldid=prev"/>
		<updated>2013-03-31T19:03:30Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060324}}  &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; me…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060324}}&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; mergin-top: 2px; margin-bottom: 2px;}&lt;br /&gt;
	code.precompact { white-space: pre; display:block; mergin-top: 2px; margin-bottom: 2px; line-height: 12px; }&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; [[AdatbServerProgJegyzet20060321|&amp;amp;lt;&amp;amp;lt;]] Előadás, 2006.03.24. [[AdatbServerProgJegyzet20060328|&amp;amp;gt;&amp;amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Triggerek==&lt;br /&gt;
&lt;br /&gt;
A trigger egy adatbázis eseményre automatikusan lefutó tárolt eljárás. Explicite nem hívható.&lt;br /&gt;
&lt;br /&gt;
Típusai:&lt;br /&gt;
* DML triggerek: =INSERT=, =UPDATE= vagy =DELETE= eseménzekre fut le&lt;br /&gt;
* DDL triggerek: =CREATE=, =ALTER=, =DROP=, =GRANT=, =REVOKE= eseményekre fut le&lt;br /&gt;
* Szerver események: Startup, Shutdown&lt;br /&gt;
* Felhasználói események: Logon, Logoff&lt;br /&gt;
&lt;br /&gt;
===DML triggerek===&lt;br /&gt;
* esemény lehet: =INSERT=, =UPDATE= vagy =DELETE=&lt;br /&gt;
* nézethez vagy táblához rendelhető hozzá&lt;br /&gt;
* esemény előtt (&amp;lt;pre&amp;gt;BEFORE&amp;lt;/pre&amp;gt;), után (&amp;lt;pre&amp;gt;AFTER&amp;lt;/pre&amp;gt;) vagy helyett (&amp;lt;pre&amp;gt;INSTEAD OF&amp;lt;/pre&amp;gt;) fut le&lt;br /&gt;
* az esemény bekövetkeztekor lefuthat egyszer vagy minden sorra&lt;br /&gt;
&lt;br /&gt;
====Szintaktika====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE TRIGGER név&lt;br /&gt;
	{BEFORE | AFTER || INSTEAD OF} {INSERT || DELETE  UPDATE [OF oszlop1, ...]}&lt;br /&gt;
	[OR további események ...]&lt;br /&gt;
	ON {táblanév | nézetnév} [FOR EACH ROW]&lt;br /&gt;
	[WHEN feltétel]&lt;br /&gt;
PL/SQL blokk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Az =INSTEAD OF= csak nézetre használható. Akkor van értelme, ha a nézet több táblából származik. Ilyenkor az Oracle nem támogatja az =INSERT=, =UPDATE= és =DELETE= parancsokat, nekünk kell megírnunk, hogy mi történjen.&lt;br /&gt;
* A =BEFORE= és az =AFTER= csak táblára működik. &lt;br /&gt;
* Az =UPDATE= trigger alapesetben bármelyik oszlop változása esetén kiváltódik, de az =OF= kulcsszóval szűkíthető kevesebb oszlopra.&lt;br /&gt;
* A tábla törlésével a kapcsolódó triggerek is törlődnek&lt;br /&gt;
&lt;br /&gt;
====BEFORE használata====&lt;br /&gt;
* A =BEFORE= az utasítás előtt fut le, ha exceptiont dobunk, az utasítás nem hajtódik végre&lt;br /&gt;
* Leggyakoribb célok&lt;br /&gt;
** azonosító generálás&lt;br /&gt;
** logolás, ha a próbálkozást is naplózzuk (pl. biztonsági log)&lt;br /&gt;
** táblaméret korlátozása (&amp;lt;pre&amp;gt;INSERT&amp;lt;/pre&amp;gt; előtt, pl. a vizsgára csak 20 ember jelentkezhet)&lt;br /&gt;
** származtatott mező kitöltése&lt;br /&gt;
&lt;br /&gt;
====AFTER használata====&lt;br /&gt;
* származtatott mező kitöltése másik táblában, mint amire az SQL utasítás hivatkozik&lt;br /&gt;
* sikeres műveletek naplózása&lt;br /&gt;
&lt;br /&gt;
====Triggerek lefutási sorrendje====&lt;br /&gt;
* =BEFORE= utasításra vonatkozó trigger&lt;br /&gt;
* minden sorra&lt;br /&gt;
** =BEFORE= sorra vonatkozó trigger&lt;br /&gt;
** utasítás&lt;br /&gt;
** =AFTER= sorra vonatkozó trigger&lt;br /&gt;
* =AFTER= utasításra vonatkozó trigger&lt;br /&gt;
* Ha 1 táblára több azonos típusú trigger is vonatkozik, a lefutási sorrend nem definiált&lt;br /&gt;
&lt;br /&gt;
====Hivatkozás az éppen beszúrt vagy törölt adatokra====&lt;br /&gt;
* csak =FOR EACH ROW= trigger esetén használható&lt;br /&gt;
* Beszúrandó (&amp;lt;pre&amp;gt;INSERT&amp;lt;/code) vagy módosított (&amp;lt;code&amp;gt;UPDATE&amp;lt;/pre&amp;gt;) érték: =:new.oszlopnév=&lt;br /&gt;
* Módosítandó (&amp;lt;pre&amp;gt;UPDATE&amp;lt;/code) vagy törlendőt (&amp;lt;code&amp;gt;DELETE&amp;lt;/pre&amp;gt;) érték: =:old.oszlopnév=&lt;br /&gt;
* A =BEFORE= triggerekben a =:new= értékek írhatók, az =:old= értékek csak olvashatók&lt;br /&gt;
* Az =AFTER= triggerekben mindkettő csak olvasható&lt;br /&gt;
&lt;br /&gt;
===DDL triggerek===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE TRIGGER név&lt;br /&gt;
	{BEFORE | AFTER} DDL esemény [OR DDL esemény ...]&lt;br /&gt;
	ON SCHEMA&lt;br /&gt;
	[WHEN feltétel]&lt;br /&gt;
PL/SQL blokk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Szerver triggerek===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE TRIGGER név&lt;br /&gt;
	{BEFORE | AFTER} adatbázis esemény [OR adatbázis esemény ...]&lt;br /&gt;
	ON DATABASE&lt;br /&gt;
	[WHEN feltétel]&lt;br /&gt;
PL/SQL blokk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Példák===&lt;br /&gt;
&lt;br /&gt;
====ID generálás====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE TRIGGER agyag_idtr BEFORE INSERT ON anyag FOR EACH ROW&lt;br /&gt;
BEGIN&lt;br /&gt;
	SELECT anyag_seq.NEXTVAL INTO :new.anyag_id FROM DUAL;&lt;br /&gt;
END;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Kurzus létszám korlátozása====&lt;br /&gt;
&lt;br /&gt;
Relációs séma:&lt;br /&gt;
&amp;lt;code class=&amp;quot;precompact&amp;quot;&amp;gt;&lt;br /&gt;
+------=		 +----------------+		 +-----------+=&lt;br /&gt;
&amp;amp;#124; Student |-------|| Student_course ||-------|| Course	 &lt;br /&gt;
|}&lt;br /&gt;
+------=		 +----------------+		 +-----------+=&lt;br /&gt;
														 &amp;amp;#124; cou_limit |&lt;br /&gt;
|}&lt;br /&gt;
														 +--------==&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;pre&amp;quot;&amp;gt;CREATE OR REPLACE TRIGGER diak_limit&lt;br /&gt;
	BEFORE INSERT ON student_course FOR EACH ROW&lt;br /&gt;
DECLARE&lt;br /&gt;
	db INT;&lt;br /&gt;
	dblimit INT;&lt;br /&gt;
BEGIN&lt;br /&gt;
	SELECT count(*) INTO db FROM student_course WHERE sc_courseid = :new.sc_courseid;&lt;br /&gt;
	SELECT cou_limit INTO dblimit FROM course WHERE cou_id = :new.sc_courseid;&lt;br /&gt;
	IF db&amp;gt;=dblimit THEN&lt;br /&gt;
		RAISE_APPLICATION_ERROR(-20111, &amp;#039;Betelt&amp;#039;);&lt;br /&gt;
	END IF;&lt;br /&gt;
END;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Trigger szintű constraintek====&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* Formula 1 relációs séma&lt;br /&gt;
* milyen constrainteknek van értelme jelen esetben&lt;br /&gt;
* kód a helyezés számítására&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.03.27.&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>