Hatékony PL/SQL programok írása
|
|
- Csilla Bakos
- 6 évvel ezelőtt
- Látták:
Átírás
1 Hatékony PL/SQL programok írása
2 Hatékony PL/SQL programok írása a fordító optimalizációs beállításai a feltételes fordítás fordító figyelmeztetései a natív nyelvű fordítás néhány teljesítményhangolási tanács
3 A fordító beállításai A fordító viselkedését inicializációs paraméterek szabályozzák. Három szinten lehet beállítani: Oracle példány: ALTER SYSTEM SET Munkamenet szinten (a példány szintűt felüldefiniálja): ALTER SESSION SET Az egyes programegységek fordításakor is megadhatók (legerősebb mód)(kiv. néhány): ALTER COMPILE
4 A fordító beállításai Inicializációs paraméterek PLSQL_OPTIMIZE_LEVEL PLSQL_CODE_TYPE PLSQL_DEBUG PLSQL_WARNINGS PLSQL_CCFLAGS NLS_LENGTH_SEMANTICS Információ az érvényben lévő beállításokról a már lefordított programegységek esetén: DBA_PLSQL_OBJECT_SETTINGS ALL_PLSQL_OBJECT_SETTINGS USER_PLSQL_OBJECT_SETTINGS
5 A fordító beállításai ALTER COMPILE REUSE SETTINGS: Egy újrafordítás során a korábbi beállítások megtartja az aktuális munkamenet- és példányszintű beállításoktól függetlenül. ALTER PROCEDURE proc COMPILE PLSQL_OPTIMIZE_LEVEL=0 PLSQL_DEBUG=FALSE REUSE SETTINGS; Az ALTER COMPILE utasítás DEBUG utasításrészének hatása megegyezik a PLSQL_DEBUG=TRUE beállításéval.
6 Az optimalizáló fordító A PL/SQL kódot az optimalizáló gyorsabbá tudja tenni, optimalizálni tudja, a kódot részben átstrukturálja, a számításokhoz minél hatékonyabb módot választ anélkül, hogy a kód értelmét megváltoztatja garantálja, hogy nem hagy ki explicit alprogramhívást garantálja, hogy nem ír elő új alprogram bevezetését garantálja, hogy nem vált ki olyan kivételt, ami eredetileg nem váltódna ki előfordulhat, hogy az optimalizált kód nem vált ki kivételt ott, ahol az optimalizálatlan kód kiváltana.
7 Az optimalizáló fordító PLSQL_OPTIMIZE_LEVEL inicializációs paraméter: az optimalizálás mértékét szabályozza értékei: 2: teljes körű optimalizálás, alapértelmezett érték 1: lokális optimalizálás (számítások, kifejezések optimalizálása) 0: az optimalizáló kikapcsolása
8 Az optimalizáló fordító Optimalizáló műveletek: 1. Matematikai számítások optimalizálása a) Fordítási időben kiértékelhető kifejezések kiértékelése b) Egy kevésbé hatékony művelet helyett egy hatékonyabb használata c) Kereszteredmények számítása d) A precedencia által nem kötött műveletek kiértékelési sorrendjének tetszőleges megválasztása
9 Az optimalizáló fordító Optimalizáló műveletek: 2. Ciklus magjából a ciklusváltozótól független számítás kiemelése
10 CREATE OR REPLACE PROCEDURE proc_szamitas(p_iter PLS_INTEGER) IS a PLS_INTEGER; b PLS_INTEGER; c PLS_INTEGER; d PLS_INTEGER; BEGIN FOR i IN 1..p_Iter LOOP a := i+1; b := i-2; c := b-a+1; d := b-a-1; -- ismétlődő kifejezés előfordulása END LOOP; END proc_szamitas; / SHOW ERRORS; -- Fordítás optimalizálással, majd futtatás ALTER PROCEDURE proc_szamitas COMPILE PLSQL_OPTIMIZE_LEVEL=2 PLSQL_DEBUG=FALSE; SET TIMING ON EXEC proc_szamitas( ); SET TIMING OFF; -- Eltelt: 00:00: Fordítás optimalizálás nélkül, majd futtatás ALTER PROCEDURE proc_szamitas COMPILE PLSQL_OPTIMIZE_LEVEL=0 PLSQL_DEBUG=FALSE; SET TIMING ON EXEC proc_szamitas( ); SET TIMING OFF; -- Eltelt: 00:00:05.54
11 FOR i IN 1..p_Iter LOOP a := 3+1; b := 3-2; c := b-a+1; d := b-a-1; -- ismétlődő kifejezés előfordulása END LOOP; -- Fordítás optimalizálással, majd futtatás -- Eltelt: 00:00: Fordítás optimalizálás nélkül, majd futtatás -- Eltelt: 00:00:05.53
12 BEGIN a := 3+1; b := 3-2; c := b-a+1; d := b-a-1; -- ismétlődő kifejezés előfordulása FOR i IN 1..p_Iter LOOP NULL; -- ez maradt a ciklusmagból END LOOP; END proc_szamitas; -- Fordítás optimalizálással, majd futtatás -- Eltelt: 00:00: Fordítás optimalizálás nélkül, majd futtatás -- Eltelt: 00:00:00.45
13 Az optimalizáló fordító Optimalizáló műveletek: 3. A CONSTANT kulcsszó figyelembevétele
14 CREATE OR REPLACE PROCEDURE proc_konstans(p_iter PLS_INTEGER) IS c_konstans CONSTANT NUMBER := 98765; v_konstans NUMBER := 98765; v1 NUMBER := 1; v2 NUMBER; -- Tesztelést segítő változók v_ures_ciklus_ideje NUMBER; t NUMBER; t1 NUMBER; t2 NUMBER; -- Eljárás esetleges mellékhatással PROCEDURE proc_lehet_mellekhatasa IS BEGIN NULL; END; -- Tesztelést segítő eljárások PROCEDURE cimke(p_cimke VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT(RPAD(p_Cimke, 20)); END cimke; PROCEDURE eltelt(p_ures_ciklus BOOLEAN DEFAULT FALSE) IS BEGIN t := t2-t1; IF p_ures_ciklus THEN v_ures_ciklus_ideje := t; END IF; DBMS_OUTPUT.PUT_LINE('- eltelt: ' LPAD(t, 5) ', ciklusidő nélkül:' LPAD((t-v_Ures_ciklus_ideje), 5)); END eltelt;
15 -- Az eljárás törzse BEGIN cimke('üres ciklus'); t1 := DBMS_UTILITY.GET_TIME; FOR i IN 1..p_Iter LOOP proc_lehet_mellekhatasa; END LOOP; t2 := DBMS_UTILITY.GET_TIME; eltelt(p_ures_ciklus => TRUE); cimke('változó használata'); t1 := DBMS_UTILITY.GET_TIME; FOR i IN 1..p_Iter LOOP proc_lehet_mellekhatasa; v2 := v1 + v_konstans * 12345; END LOOP; t2 := DBMS_UTILITY.GET_TIME; eltelt; cimke('konstans használata'); t1 := DBMS_UTILITY.GET_TIME; FOR i IN 1..p_Iter LOOP proc_lehet_mellekhatasa; v2 := v1 + c_konstans * 12345; END LOOP; t2 := DBMS_UTILITY.GET_TIME; eltelt; END proc_konstans; / SHOW ERRORS;
16 PROMPT 1. PLSQL_OPTIMIZE_LEVEL=2 -- Fordítás optimalizálással, majd futtatás ALTER PROCEDURE proc_konstans COMPILE PLSQL_OPTIMIZE_LEVEL=2 PLSQL_DEBUG=FALSE; EXEC proc_konstans( ); PROMPT 2. PLSQL_OPTIMIZE_LEVEL=0 -- Fordítás optimalizálás nélkül, és futtatás ALTER PROCEDURE proc_konstans COMPILE PLSQL_OPTIMIZE_LEVEL=0 PLSQL_DEBUG=FALSE; EXEC proc_konstans( ); /* Egy tipikusnak mondható kimenet: 1. PLSQL_OPTIMIZE_LEVEL=2 Az eljárás módosítva. Üres ciklus - eltelt: 78, ciklusidő nélkül: 0 Változó használata - eltelt: 186, ciklusidő nélkül: 108 Konstans használata - eltelt: 117, ciklusidő nélkül: 39 A PL/SQL eljárás sikeresen befejeződött. 2. PLSQL_OPTIMIZE_LEVEL=0 Az eljárás módosítva. Üres ciklus - eltelt: 79, ciklusidő nélkül: 0 Változó használata - eltelt: 246, ciklusidő nélkül: 167 Konstans használata - eltelt: 245, ciklusidő nélkül: 166 A PL/SQL eljárás sikeresen befejeződött.*/
17 Az optimalizáló fordító Optimalizáló műveletek: 4. Csomaginicializálás késleltetése
18 -- Csomag inicializálással és az inicializálástól nem függő tagokkal CREATE OR REPLACE PACKAGE csomag_inittel IS -- Néhány csomagbeli elem c_konstans CONSTANT NUMBER := 10; v_valtozo NUMBER := 10; TYPE t_rec IS RECORD (id NUMBER, nev VARCHAR2(10000)); END csomag_inittel; / CREATE OR REPLACE PACKAGE BODY csomag_inittel IS -- Csomaginicializáló blokk BEGIN DBMS_OUTPUT.PUT_LINE('Csomaginicializáló blokk.'); -- Egy kis várakozás, sokat dolgozik ez a kód... DBMS_LOCK.SLEEP(10); -- A DBMS_LOCK csomag a SYS sémában van, -- használatához EXECUTE jog szükséges. END csomag_inittel; /
19 -- Csomagot hivatkozó eljárás CREATE OR REPLACE PROCEDURE proc_csomag_inittel IS -- Csomagbeli típus hivatkozása v_rec csomag_inittel.t_rec; v2 csomag_inittel.v_valtozo%type; BEGIN -- Csomagbeli konstans hivatkozása DBMS_OUTPUT.PUT_LINE('Csomag konstansa: ' csomag_inittel.c_konstans); END proc_csomag_inittel; / -- Tesztek -- Új munkamenet nyitása, hogy a csomag ne legyen inicializálva CONNECT plsql/plsql SET SERVEROUTPUT ON FORMAT WRAPPED; -- Fordítás optimalizálással, majd futtatás ALTER PROCEDURE proc_csomag_inittel COMPILE PLSQL_OPTIMIZE_LEVEL=2 PLSQL_DEBUG=FALSE; SET TIMING ON EXEC proc_csomag_inittel; SET TIMING OFF; -- Eltelt: 00:00:00.01
20 -- Új munkamenet nyitása, hogy a csomag ne legyen inicializálva CONNECT plsql/plsql SET SERVEROUTPUT ON FORMAT WRAPPED; -- Fordítás optimalizálás nélkül, majd futtatás ALTER PROCEDURE proc_csomag_inittel COMPILE PLSQL_OPTIMIZE_LEVEL=0 PLSQL_DEBUG=FALSE; SET TIMING ON EXEC proc_csomag_inittel; -- Eltelt: 00:00:10.01 SET TIMING OFF;
21 Az optimalizáló fordító Optimalizáló műveletek: 5. Indexet tartalmazó kifejezések indexelésének gyorsítása
22 CREATE OR REPLACE PROCEDURE proc_indexes_kifejezes(p_iter PLS_INTEGER) IS TYPE t_tab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; v_tab t_tab; v_index NUMBER; v_dummy NUMBER; -- Tesztelést segítő változók t NUMBER; t1 NUMBER; t2 NUMBER; v_ures_ciklus_ideje NUMBER; -- Tesztelést segítő eljárások PROCEDURE cimke(p_cimke VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT(RPAD(p_Cimke, 25)); END cimke; PROCEDURE eltelt(p_ures_ciklus BOOLEAN DEFAULT FALSE) IS BEGIN t := t2-t1; IF p_ures_ciklus THEN v_ures_ciklus_ideje := t; END IF; DBMS_OUTPUT.PUT_LINE('- eltelt: ' LPAD(t, 5) ', ciklusidő nélkül:' LPAD((t-v_Ures_ciklus_ideje), 5)); END eltelt;
23 -- Az eljárás törzse BEGIN cimke('üres ciklus értékadással'); t1 := DBMS_UTILITY.GET_TIME; FOR i IN 1..p_Iter LOOP v_index := i-i; -- Egy értékadás END LOOP; t2 := DBMS_UTILITY.GET_TIME; eltelt(p_ures_ciklus => true); cimke('változó index'); t1 := DBMS_UTILITY.GET_TIME; FOR i IN 1..p_Iter LOOP v_index := i-i; -- Egy értékadás v_tab(v_index) := 10; END LOOP; t2 := DBMS_UTILITY.GET_TIME; eltelt; cimke('változatlan index'); t1 := DBMS_UTILITY.GET_TIME; v_index := 0; FOR i IN 1..p_Iter LOOP v_dummy := i-i; -- Egy értékadás, hogy ugyanannyi kód legyen. v_tab(v_index) := 10; END LOOP; t2 := DBMS_UTILITY.GET_TIME; eltelt; END proc_indexes_kifejezes;
24 SET SERVEROUTPUT ON FORMAT WRAPPED; PROMPT 1. PLSQL_OPTIMIZE_LEVEL=2 -- Fordítás optimalizálással, majd futtatás ALTER PROCEDURE proc_indexes_kifejezes COMPILE PLSQL_OPTIMIZE_LEVEL=2 PLSQL_DEBUG=FALSE; EXEC proc_indexes_kifejezes( ); PROMPT 2. PLSQL_OPTIMIZE_LEVEL=0 -- Fordítás optimalizálás nélkül, majd futtatás ALTER PROCEDURE proc_indexes_kifejezes COMPILE PLSQL_OPTIMIZE_LEVEL=0 PLSQL_DEBUG=FALSE; EXEC proc_indexes_kifejezes( );
25 /*Egy tipikusnak mondható kimenet: PLSQL_OPTIMIZE_LEVEL=2 Az eljárás módosítva. Üres ciklus értékadással - eltelt: 40, ciklusidő nélkül: 0 Változó index - eltelt: 110, ciklusidő nélkül: 70 Változatlan index - eltelt: 83, ciklusidő nélkül: 43 A PL/SQL eljárás sikeresen befejeződött. 2. PLSQL_OPTIMIZE_LEVEL=0 Az eljárás módosítva. Üres ciklus értékadással - eltelt: 50, ciklusidő nélkül: 0 Változó index - eltelt: 146, ciklusidő nélkül: 96 Változatlan index - eltelt: 148, ciklusidő nélkül: 98 A PL/SQL eljárás sikeresen befejeződött. */
26 Az optimalizáló fordító Optimalizáló műveletek: 6. Statikus kurzor FOR ciklusok együttes hozzárendeléssel történő helyettesítése
27 CREATE OR REPLACE PROCEDURE proc_ciklus_bulk IS TYPE t_num_tab IS TABLE OF NUMBER; TYPE t_char_tab IS TABLE OF VARCHAR2(100); v_num_tab t_num_tab; v_char_tab t_char_tab; cur SYS_REFCURSOR; -- Tesztelést segítő változók t1 NUMBER; t2 NUMBER; lio1 NUMBER; lio2 NUMBER; v_session_tag VARCHAR2(100); -- Tesztelést segítő eljárások PROCEDURE cimke(p_cimke VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT(RPAD(p_Cimke, 20)); END cimke; PROCEDURE tag_session IS BEGIN v_session_tag := 'teszt-' SYSTIMESTAMP; DBMS_APPLICATION_INFO.SET_CLIENT_INFO(v_Session_tag); END tag_session;
28 FUNCTION get_logical_io RETURN NUMBER IS rv NUMBER; BEGIN SELECT st.value INTO rv FROM v$sesstat st, v$session se, v$statname n WHERE n.name = 'consistent gets' AND se.client_info = v_session_tag AND st.sid = se.sid AND n.statistic# = st.statistic#; RETURN rv; END get_logical_io; PROCEDURE eltelt IS BEGIN DBMS_OUTPUT.PUT_LINE('- eltelt: ' LPAD(t2-t1, 5) ', LIO (logical I/O) :' LPAD((lio2-lio1), 7)); END eltelt;
29 BEGIN -- Az eljárás törzse tag_session; cimke('statikus kurzor FOR'); t1:= DBMS_UTILITY.GET_TIME; lio1 := get_logical_io; FOR i IN ( SELECT k1.id, k1.cim FROM konyv k1, konyv, konyv, konyv, konyv, konyv WHERE ROWNUM <= ) LOOP NULL; END LOOP; t2 := DBMS_UTILITY.GET_TIME; lio2 := get_logical_io; eltelt; cimke('kurzor BULK FETCH'); t1:= DBMS_UTILITY.GET_TIME; lio1 := get_logical_io; OPEN cur FOR SELECT k1.id, k1.cim FROM konyv k1, konyv, konyv, konyv, konyv, konyv WHERE ROWNUM <= ; LOOP FETCH cur BULK COLLECT INTO v_num_tab, v_char_tab LIMIT 100; EXIT WHEN v_num_tab.count = 0; FOR i IN 1..v_Num_tab.COUNT LOOP NULL; END LOOP; END LOOP; CLOSE cur; t2 := DBMS_UTILITY.GET_TIME; lio2 := get_logical_io; eltelt; EXCEPTION WHEN OTHERS THEN IF cur%isopen THEN CLOSE cur; END IF; RAISE; END proc_ciklus_bulk;
30 SET SERVEROUTPUT ON FORMAT WRAPPED; -- Fordítás optimalizálással, majd futtatás PROMPT 1. PLSQL_OPTIMIZE_LEVEL=2 ALTER PROCEDURE proc_ciklus_bulk COMPILE PLSQL_OPTIMIZE_LEVEL=2 PLSQL_DEBUG=FALSE; EXEC proc_ciklus_bulk; PROMPT 2. PLSQL_OPTIMIZE_LEVEL=0 -- Fordítás optimalizálás nélkül, majd futtatás ALTER PROCEDURE proc_ciklus_bulk COMPILE PLSQL_OPTIMIZE_LEVEL=0 PLSQL_DEBUG=FALSE; EXEC proc_ciklus_bulk;
31 /* Egy tipikusnak mondható kimenet: PLSQL_OPTIMIZE_LEVEL=2 Az eljárás módosítva. Statikus kurzor FOR - eltelt: 100, LIO (logical I/O) : Kurzor BULK FETCH - eltelt: 81, LIO (logical I/O) : A PL/SQL eljárás sikeresen befejeződött. 2. PLSQL_OPTIMIZE_LEVEL=0 Az eljárás módosítva. Statikus kurzor FOR - eltelt: 636, LIO (logical I/O) : Kurzor BULK FETCH - eltelt: 80, LIO (logical I/O) : A PL/SQL eljárás sikeresen befejeződött. */
32 Automatic Subprogram Inlining (11g) Minden alprogramhívásnak költsége van, pl. ha cikluson belül hívjuk meg. Csökkenti az alprogramhívás költségét, azzal, hogy az alprogram kódját bemásolja a ciklusba Kezelése: PLSQL_OPTIMIZE_LEVEL=3: esetén automatikusan bemásolódhat a kód INLINE pragmával explicit módon ki és be lehet kapcsolni
33 ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL=2; SET SERVEROUTPUT ON DECLARE l_loops NUMBER := ; l_start NUMBER; l_return NUMBER; FUNCTION add_numbers (p_1 IN NUMBER, p_2 IN NUMBER) RETURN NUMBER AS BEGIN RETURN p_1 + p_2; END add_numbers; BEGIN l_start := DBMS_UTILITY.get_time; FOR i IN 1.. l_loops LOOP --PRAGMA INLINE (add_numbers, 'YES'); l_return := add_numbers(1, i); END LOOP; DBMS_OUTPUT.put_line('Elapsed Time: ' (DBMS_UTILITY.get_time - l_start) ' hsecs'); END; / Elapsed Time: 509 hsecs PL/SQL procedure successfully completed.
34 Feltételes fordítás Feltételes fordítás során a tényleges fordítást előfordítás előzi meg. Az előfordító a fordításkor fennálló körülményektől függően a megadott kód szövegéből egy előfordítói direktívákat már nem tartalmazó kódot állít elő, ez kerül azután lefordításra. A direktívák kis- és nagybetűre nem érzékenyek. Használatának tipikus esetei: Egy általános rutin megírásakor fel tudunk készülni arra, hogy a kód különböző adatbázis-kezelő verziókban is ki tudja használni a nyelv új eszközeit az adott környezetben rendelkezésre álló verziótól függően. Nyomkövetési kódot helyezhetünk el a programban, amit a feltételes fordítás segítségével csak fejlesztői környezetben használunk.
35 Feltételes fordítás Az előfordítói szerkezetekben használható kifejezések speciálisan csak fordítási időben kiértékelhető BOOLEAN, PLS_INTEGER és VARCHAR2 típusú kifejezések lehetnek. Jelölésük: rendre a bkf, pkf, vkf. bkf: {TRUE FALSE NULL bkf hasonlító_operátor bkf pkf hasonlító_operátor pkf NOT bkf bkf AND bkf bkf OR bkf {bkf pkf vkf} IS [NOT] NULL csomagbeli_boolean_statikus_nevesített_konstans boolean_értékdirektíva} pkf: {pls_integer_literál NULL csomagbeli_pls_integer_statikus_nevesített_konstans pls_integer_értékdirektíva} vkf: {char_literál NULL TO_CHAR(pkf) TO_CHAR(pkf, vkf, vkf) {pkf vkf} {pkf vkf} varchar2_értékdirektíva}
36 Feltételes fordítás Nevesített konstans ($ jel nélküli hivatkozás) Értékdirektívák: $$azonosító; PLSQL_CCFLAGS paraméterből kapnak értéket Elágaztató direktíva: $IF bkf $THEN kód $END [ $ELSIF bkf $THEN kód ] [ $ELSE kód ] Hibadirektíva: $ERROR vkf $END
37 ALTER SESSION SET PLSQL_CCFLAGS='debug:2'; CREATE OR REPLACE PROCEDURE proc_preproc IS BEGIN $IF $$debug = 1 $THEN DBMS_OUTPUT.PUT_LINE('Van DEBUG'); $ELSIF $$debug = 0 $THEN DBMS_OUTPUT.PUT_LINE('Nincs DEBUG'); $ELSIF $$debug IS NOT NULL $THEN $ERROR 'Érvénytelen DEBUG beállítás: ' 'PLSQL_CCFLGAS=' $$PLSQL_CCFLAGS $END $END DBMS_OUTPUT.PUT_LINE('Kód'); END proc_preproc; / SHOW ERRORS;
38 ALTER PROCEDURE proc_preproc COMPILE PLSQL_CCFLAGS='debug:1'; SET SERVEROUTPUT ON FORMAT WRAPPED; BEGIN DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE( END; / /* object_type => 'PROCEDURE', schema_name => 'PLSQL', object_name => 'PROC_PREPROC'); Az eljárás módosítva. PROCEDURE proc_preproc IS BEGIN DBMS_OUTPUT.PUT_LINE('Van DEBUG'); DBMS_OUTPUT.PUT_LINE('Kód'); END proc_preproc; A PL/SQL eljárás sikeresen befejeződött. */
39 ALTER SESSION SET PLSQL_CCFLAGS='konstansom_erteke:TRUE'; CREATE OR REPLACE package pack_konstansok IS c_konstans CONSTANT BOOLEAN := $$konstansom_erteke; END; / CREATE OR REPLACE PROCEDURE proc_preproc_pack IS BEGIN $IF pack_konstansok.c_konstans $THEN DBMS_OUTPUT.PUT_LINE('pack_konstansok.c_konstans TRUE'); $ELSE DBMS_OUTPUT.PUT_LINE('pack_konstansok.c_konstans FALSE'); $END END proc_preproc_pack; / SET SERVEROUTPUT ON FORMAT WRAPPED; EXEC proc_preproc_pack; -- pack_konstansok.c_konstans TRUE -- A csomag explicit újrafordítása az eljárást érvényteleníti ALTER PACKAGE pack_konstansok COMPILE PLSQL_CCFLAGS='konstansom_erteke:FALSE'; -- Most fog az eljárás újrafordulni automatikusan EXEC proc_preproc_pack; -- pack_konstansok.c_konstans FALSE
40 Feltételes fordítás Az előfordítói direktívák használatára vonatkozóan a következő szabályok érvényesek: Nem befolyásolhatják tárolt adatbázistípusok szerkezetét, ezért nem használhatók objektumtípus specifikációjában és sémában tárolt kollekciótípusok megadásakor. Használhatók a paraméter nélküli programegységekben az IS/AS kulcsszó után, kivéve a triggereket, a névtelen blokkokat és az előző pontbeli objektumtípus specifikációt. Használhatók a paraméterrel rendelkező tárolt függvényben és eljárásban a formális paraméterlistát nyitó zárójel után. Használhatók triggerekben és névtelen blokkokban közvetlenül a kezdő DECLARE vagy BEGIN után. Környezeti gazdaváltozó helykijelölője nem szerepelhet elágaztató direktíván belül. Ez névtelen blokkban fordulhatna elő.
41 A fordító figyelmeztetései Figyelmeztetéseket a fordítás során kaphatunk. A kódban található nem biztonságos, nem konzisztens kódrészlet előfordulását jelzik. A figyelmeztetések tartalmaznak egy hibakódot PLW-XXXXX alakban 3 csoport: SEVERE, PERFORMANCE, INFORMATIONAL PLSQL_WARNINGS paraméter: DISABLE, ENABLE, ERROR Információ: {DBA ALL USER}_ERRORS SQL*Plus SHOW ERRORES DBMS_WARNING CSOMAG
42 ALTER SESSION SET PLSQL_WARNINGS='DISABLE:ALL' PLSQL_CCFLAGS=''; -- Csúnya, de hibátlan alprogram CREATE OR REPLACE PROCEDURE proc_warn IS v_id VARCHAR2(100); v_name VARCHAR2(100); to_char BOOLEAN; -- PLW-05004, megengedett, mert -- a TO_CHAR nem fenntartott szó BEGIN $IF $$kojak $THEN $END -- PLW-06003, kojak nincs a PLSQL_CCFLAGS-ben SELECT cim INTO v_name FROM konyv WHERE id = v_id; -- PLW-07204, id NUMBER, v_id VARCHAR2 IF FALSE THEN NULL; -- PLW-06002, az IF feltétele mindig hamis END IF; END proc_warn; / SHOW ERRORS;
43 ALTER PROCEDURE proc_warn COMPILE PLSQL_WARNINGS='DISABLE:ALL', 'ENABLE:SEVERE'; SHOW ERRORS; /* SP2-0805: Az eljárás fordítási figyelmeztetésekkel lett módosítva. Hibák PROCEDURE PROC_WARN: LINE/COL ERROR /3 PLW-05004: a(z) TO_CHAR azonosító a STANDARD csomagban is */ definiálva van vagy beépített SQL-elem.
44 ALTER PROCEDURE proc_warn COMPILE PLSQL_WARNINGS='DISABLE:ALL', 'ENABLE:PERFORMANCE'; SHOW ERRORS; /* SP2-0805: Az eljárás fordítási figyelmeztetésekkel lett módosítva. Hibák PROCEDURE PROC_WARN: LINE/COL ERROR /15 PLW-07204: az oszlop típusától eltérő konverzió optimum alatti */ lekérdezési szerkezetet eredményezhet
45 ALTER PROCEDURE proc_warn COMPILE PLSQL_WARNINGS='DISABLE:ALL', 'ENABLE:INFORMATIONAL'; SHOW ERRORS; /* SP2-0805: Az eljárás fordítási figyelmeztetésekkel lett módosítva. Hibák PROCEDURE PROC_WARN: LINE/COL ERROR /7 PLW-06003: ismeretlen lekérdezési direktíva: '$$KOJAK' 13/6 PLW-06002: Nem elérhető kód */
46 ALTER PROCEDURE proc_warn COMPILE PLSQL_WARNINGS='ERROR:ALL'; SHOW ERRORS; /* Figyelmeztetés: Az eljárás módosítása fordítási hibákkal fejeződött be. Hibák PROCEDURE PROC_WARN: LINE/COL ERROR /7 PLS-06003: ismeretlen lekérdezési direktíva: '$$KOJAK' */
47 Natív fordítás Natív fordítás során a p-kódból a fordító egy olyan C nyelvű forrásszöveget hoz létre, amely közvetlenül tartalmazza az utasításoknak megfelelő API hívásokat. Ezt a C forrást aztán a rendszerben rendelkezésre álló C fordítóval fordítja be egy osztott könyvtárba A programegység végrehajtásakor elég az osztott könyvtárat használni. A kód értelmezésének ideje csökken Nagy számításigényű kódoknál teljesítménynövekedés PLSQL_CODE_TYPE inicializációs paraméterrel szabályozzuk: értéke INTERPRETED vagy NATIVE lehet
48 Tanácsok a hangoláshoz és a hatékonyság növeléséhez Főbb hangolási alapelvek: Mérjünk. Mérjünk hangolás előtt, hogy legyen referenciánk. Tűzzük ki a célt, amivel elégedettek leszünk. Keressük meg a legszűkebb keresztmetszetet. A Pareto-elv, másik nevén a 80/20 szabály Egyszerre egy módosítást végezzünk. A módosítás hatását jósoljuk meg, állítsunk fel hipotézist. Mérjünk. A fejlesztés során minél később gondolunk a teljesítményre, annál költségesebb a hangolás. Ha a fejlesztés során túl korán kezdünk el a teljesítménnyel foglalkozni az a tervezést félreviheti. A méréshez és a szűk keresztmetszet kereséséhez használhatjuk: a legegyszerűbb eszközöket: SET TIMING; DBMS_UTILITY.GET_TIME komolyabb eszközöket: DBMS_PROFILER, DBMS_TRACE, a dinamikus teljesítménynézetek ($SESSTAT, V$SYSSTAT stb.) STATSPACK programcsomag vagy az SQL trace eszközrendszer. Tanácsok hangolási tanácsok megfogadásához: Egészséges kételkedés Bizonyosság
49 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 1. Hangoljuk a kódba ágyazott SQL-utasításokat. 2. Használjuk a RETURNING utasításrészt DML utasításoknál a sor adatainak visszaolvasására. 3. Használjunk együttes hozzárendelést. (FORALL, BULK COLLECT)
50 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 4. Ha lehet, használjunk SQL-t PL/SQL helyett: Szűrjünk SQL-ben Kurzor ciklusába ágyazott lekérdezéseknél a kurzor SELECT-je és a magban szereplő lekérdezés esetlegesen egyetlen SELECT-be is összevonható allekérdezések és összekapcsolások használatával.
51 FOR v_konyv IN (SELECT id, cim FROM konyv) LOOP FOR v_kocsonzo IN (SELECT kolcsonzo FROM kolcsonzes WHERE konyv = v_konyv.id) LOOP END LOOP; END LOOP; -- helyette FOR v_konyv_kolcsonzo IN ( SELECT kv.id, kv.cim, ko.kolcsonzo LOOP FROM konyv kv, kolcsonzes ko WHERE ko.konyv = kv.id) END LOOP;
52 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 4. Ha lehet, használjunk SQL-t PL/SQL helyett: Kurzor ciklusába ágyazott DML utasításoknál a ciklus és a DML utasítás összevonható egyetlen MERGE utasításba. Néha a több ciklussal összekombinált lekérdezések, esetleg a ciklusmagba ágyazott elágaztató utasítások lényegében halmazműveleteket valósítanak meg. (SQL halmazműveletek használata)
53 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 4. Ha lehet, használjunk SQL-t PL/SQL helyett: Használjuk SQL-ben az analitikus függvényeket, aggregálásnál a KEEP utasításrészt. Nagyon gyakran lehet sok-sok lekérdezést megspórolni ezekkel. Használjuk ki a SELECT lehetőségeit, a csoportképző eszközöket, a CONNECT BY, MODEL utasításrészeket stb. Használjuk a feltételes INSERT-et olyan kurzort használó ciklus helyett, ahol a magban bizonyos feltételektől függően végzünk beszúrást egy-vagy több táblába.
54 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 4. Ha lehet, használjunk SQL-t PL/SQL helyett: Néha ciklusok helyett használhatunk sorszámokat és egyéb adatokat generáló lekérdezéseket, amiket aztán más utasításokban alkérdésként használhatunk. FOR i IN LOOP INSERT INTO t(sorszam, paros_paratlan) VALUES(i, DECODE(MOD(ROWNUM,2),0, 'páros', 'páratlan')); END LOOP; -- helyette INSERT INTO t(sorszam, paros_paratlan) SELECT ROWNUM sorszam, DECODE(MOD(ROWNUM,2),0, 'páros', 'páratlan') paros_paratlan FROM dual CONNECT BY LEVEL <= 100;
55 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 4. Ha lehet, használjunk SQL-t PL/SQL helyett: Használjuk DML utasításoknál a hibanaplózás funkciót, ahelyett hogy minden utasítás előtt explicit ellenőriznénk a DML utasítás előfeltételeit 5. SQL-ben használt függvényeknél, ha lehet, adjuk meg a DETERMINISTIC kulcsszót. 6. SQL-ben szereplő függvényhívások vagy bonyolult kifejezések esetén, törekedjünk a hívások/kiértékelések számának minimalizálására. SELECT DISTINCT SQRT(x) FROM helyette SELECT SQRT(distinct_x) FROM (SELECT DISTINCT x AS distinct_x FROM... )
56 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 7. Nagyméretű paraméterek átadásakor fontoljuk meg a NOCOPY használatát. 8. Logikai operátorokkal képzett bonyolult kifejezésekben használjuk ki a rövidzár kiértékelést. 9. Kerüljük az adatkonverziót, főleg az implicit adatkonverziót. Használjunk megfelelő típusú literálokat és változókat. 10.A számítások eredményeit gyorsítás céljából őrizzük meg. 11.Számításoknál használjunk megfelelő típust
57 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 12. Lokális VARCHAR2 típusú változók hosszát válasszuk elég nagyra a futási idejű hibák megelőzése céljából. 13. A hatékonyabb memóriahasználat és a függőségek egyszerűsítése érdekében a logikailag összetartozó alprogramokat tegyük egy csomagba. 14. A munkamenetek által visszatérően és elég gyakran használt nagyméretű csomagokat rögzítsük a memóriába a DBMS_SHARED_POOL csomaggal. Az ilyen csomag kódja mindig a memóriában, az osztott tartományban marad, függetlenül az osztott tartomány telítődésétől és a csomag használatának sűrűségétől. 15. Ne használjuk a COMMIT parancsot túl gyakran és fölöslegesen. Ha tehetjük, tegyük a COMMIT-ot cikluson kívülre, vagy cikluson belül valamilyen gyakorisággal hajtsuk csak végre.
58 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 16. Memóriában rendezhetünk asszociatív tömbbel. Ha egy asszociatív tömbbe elemeket szúrunk be és az elemeken a FIRST, NEXT vagy a LAST, PRIOR párokkal iterálunk, a kulcsokon rendezetten haladunk végig. 17. Explicit OPEN utasítással megnyitott kurzor esetén a használó blokk kivételkezelőjének valamennyi ágában biztosítsuk, hogy a kurzor véletlenül se maradhasson nyitva. A nyitott kurzorok száma adatbázis példányonként limitált, telítettsége kényszerleálláshoz is vezethet. 18. Készítsük fel a programjainkat arra, hogy támogassák az előre nem látott hibák könnyű lokalizálását és javítását. DBMS_UTILITY csomag FORMAT_CALL_STACK, FORMAT_ERROR_BACKTRACE FORMAT_ERROR_STACK
59 Tanácsok a hangoláshoz és a hatékonyság növeléséhez 19.A kód átláthatóságát növeli és a copy-paste hibák előfordulását csökkenti az, ha az alprogramokat, triggereket és csomagokat záró END utasításban használjuk a programegység nevét. 20.Értelmezzük a fordító figyelmeztetéseit, a kód javításával törekedjünk azok megszüntetésére. 21.Ismerjük meg a szerver alapcsomagjait. 22.Ismerjük meg és használjuk a beépített SQL függvényeket.
Haladó DBMS ismeretek 1
Haladó DBMS ismeretek 1 Hasznos információk A tantárgy weboldala: it.inf.unideb.hu/honlap/halado_oracle1 Oracle Junior képzés Gyakorlatok és a neptun Gyakorlat követelmények Ajánlott irodalom Juhász István
Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN
Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN B IT v: 2016.03.03 MAN Csomagok A DBMS csomagok a PL/SQL alkalmazások fejlesztését segítik, bennük tároljuk a létrehozott programok kódjait. A specifikációs
Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)
Csomagok Csomag Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll specifikáció törzs (opcionális) Csomagspecifikáció CREATE [OR REPLACE] PACKAGE csomagnév [AUTHID {DEFINER CURRENT_USER}]
PL/SQL blokk. [címke] [DECLARE deklarációs utasítás(ok)] BEGIN végrehajtható utasítás(ok) [EXCEPTION kivételkezelő] END [név];
PL/SQL blokk [címke] [DECLARE deklarációs utasítás(ok)] végrehajtható utasítás(ok) [EXCEPTION kivételkezelő] END [név]; PL/SQL alprogramok Blokkba ágyazva Séma szinten Csomagban PL/SQL alprogramok Eljárás:
Tranzakciókezelés PL/SQL-ben
Tranzakciókezelés PL/SQL-ben ACID tulajdonságok: Tranzakció Atomosság, Konzisztencia, Izoláció, Tartósság A tranzakció állhat: - Több DML utasításból - Egy DDL utasításból A tranzakció kezdete az első
B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:
B IT MAN 65/1 Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN v: 2016.02.27 Ellenőrző kérdések 1. B IT MAN 65/2 1. Egy bemenő paraméter nélküli tárolt rutin visszaad egy értéket. Ez a rutin:
Hozzunk ki többet abból amink van. Fehér Lajos
Hozzunk ki többet abból amink van Fehér Lajos Adatelérés Örök érvényű dolgaink Sor láncolás, migráció Index elhasználódás Tábla fregmentálódás Indexek száma Referenciális hivatkozások Triggerek Adatelérés
Együttes hozzárendelés
Együttes hozzárendelés Együttes hozzárendelés Hozzárendelés: az a tevékenységet, amikor egy PL/SQLváltozónak egy SQL-utasításban adunk értéket. Együttes hozzárendelés: Egy kollekció minden elemének egyszerre
PL/SQL (folytatás) Kurzorok, függvények, eljárások
PL/SQL (folytatás) Kurzorok, függvények, eljárások Kurzorok Adattábla soronkénti feldolgozására szolgál A memóriában egy munkaterületen tárolódik a kurzorhoz tartozó tábla A kurzor az eredményhalmazban
Kalmár György Adatbázis alapú rendszerek
Kalmár György Adatbázis alapú rendszerek Oracle-ben az SQL utasítások feldolgozásához szükség van egy ún. kontextus memóriára, amely az összes lényeges információt tárolja egy utasítás végrehajtásához.
Összefoglaló. <variable_name> [IN OUT IN OUT] <data_type> [:=<default_value>] ... <label_name>: <statements>... GOTO <label_name>;...
Összefoglaló PL/SQL alapok: Minden utasítást pontos vesszővel zárunk le. 1. Változó deklaráció: [:=]; 2. Paraméter megadása (adattípusra itt nem lehet megszorítás!):
Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!
A PL/SQL alapelemei Karakterkészlet Az angol ABC kis- és nagybetűi: a-z, A-Z Számjegyek: 0-9 Egyéb karakterek: ( ) + - * / < > =! ~ ^ ; :. ' @ %, " # $ & _ { }? [ ] Szóköz, tabulátor, kocsivissza A kis-
Adatbázisban tárolt kollekciók
Adatbázisban tárolt kollekciók Dinamikus tömb és beágyazott tábla lehet CREATE TYPE t_beagy IS TABLE OF NUMBER; CREATE TYPE t_dint IS VARRAY(5) OF NUMBER; CREATE TABLE koll_tab ( azon NUMBER PRIMARY KEY,
Triggerek. Olyan névvel ellátott adatbázisobjektumok, amelyek eseményorientált feldolgozást tesznek lehetővé
Triggerek Triggerek Olyan névvel ellátott adatbázisobjektumok, amelyek eseményorientált feldolgozást tesznek lehetővé egy eseményre válaszul futnak le a triggernevek külön névteret alkotnak Esemény bekövetkezésének
Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN
Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN B IT v: 2016.03.04 MAN Passzív adatbázisok negatívumai Példa: VIR rendszer egyik adatbázis összegyűjti a termelési adatokat, egy másik erre épül
Programozási nyelvek (ADA)
Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure)
A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja:
ORACLE TRIGGEREK A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja: CREATE [OR REPLACE] TRIGGER név { BEFORE AFTER INSTEAD OF } { DELETE INSERT UPDATE [OF oszlopok]
A PL/SQL motor. A PL/SQL nyelvű egységek fordítását és futtatását végző rendszer. az adatbázis-kezelőben fejlesztőeszközben (pl.
PL/SQL architektúra A PL/SQL motor A PL/SQL nyelvű egységek fordítását és futtatását végző rendszer az adatbázis-kezelőben fejlesztőeszközben (pl. Oracle Forms) Ha nincs benne SQL-utasítás, a teljes egység
Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17
Adatbázisok 8. gyakorlat SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT 2015. október 26. 2015. október 26. Adatbázisok 1 / 17 SQL nyelv Structured Query Language Struktúrált lekérdez
PL/SQL 1. rész. Procedural Language extension to SQL
PL/SQL 1. rész Procedural Language extension to SQL utasítást ; zárja le PL/SQL blokk lezárása: / Szintaxis kis- és nagybetű egyenértékű (az utasításokban a kulcsszavakat szoktuk nagybetűvel írni, de nem
SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók
SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:
Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás
Kódgenerálás Memóriagazdálkodás Kódgenerálás program prológus és epilógus értékadások fordítása kifejezések fordítása vezérlési szerkezetek fordítása Kódoptimalizálás L ATG E > TE' E' > + @StPushAX T @StPopBX
ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók
Oracle SQL*Plus SQL ORACLE Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható
B I T M A N B I v: T 2015.03.01 M A N
Adatbázis Rendszerek MSc 2. Gy: MySQL Táblák, adatok B I v: T 2015.03.01 M A N 1/41 Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítások DCL utasítások 2/41 Az SQL jellemzése Az SQL a relációs
B I T M A N B I v: T 2015.02.22 M A N
Adatbázis Rendszerek II. 2. Gy: PLSQL 1. B I v: T 2015.02.22 M A N 1/75 A PL/SQL alapjai A PL/SQL alapjai Változók DBMS_OUTPUT Vezérlési szerkezetek Tömbök Tárolt rutinok kezelése 2/75 Tárolt eljárások
Adatbázisok* tulajdonságai
Gazdasági folyamatok térbeli elemzése 4. előadás 2010. 10. 05. Adatbázisok* tulajdonságai Rendezett, logikailag összefüggő és meghatározott szempont szerint tárolt adatok és/vagy információk halmaza Az
Programozási nyelvek (ADA)
Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 3. előadás Programozási nyelv felépítése szabályok megadása Lexika Milyen egységek építik fel? Szintaktikus szabályok
Java II. I A Java programozási nyelv alapelemei
Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak
Az indexelés újdonságai Oracle Database 12c R1 és 12c R2
Az indexelés újdonságai Oracle Database 12c R1 és 12c R2 Szabó Rozalinda Oracle adattárház szakértő, oktató szabo.rozalinda@gmail.com Index tömörítés fejlődése 8.1.3-as verziótól: Basic (Prefixes) index
Kifejezések. Kozsik Tamás. December 11, 2016
Kifejezések Kozsik Tamás December 11, 2016 Kifejezés versus utasítás C/C++: kifejezés plusz pontosvessző: utasítás kiértékeli a kifejezést jellemzően: mellékhatása is van például: értékadás Ada: n = 5;
B I T M A N B I v: T 2015.03.09 M A N
Adatbázis Rendszerek II. 5. Gy: PLSQL Triggerek B I v: T 2015.03.09 M A N 1/37 Passzív adatbázisok negatívumai Példa: VIR rendszer egyik adatbázis összegyűjti a termelési adatokat, egy másik erre épül
Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos
PASzSz Kilencedik témakör: Lazarus-Firebird Készítette: Dr. Kotsis Domokos Az SQLdb fülön IBConnection Kapcsolat A Data Access fülön Az SQLdb fülön... Select 1. Az SQLQuery lezárása. (Active := false,
BASH script programozás II. Vezérlési szerkezetek
06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van
Database Systems II. ZH összefoglaló
Database Systems II. ZH összefoglaló 1) Kód az adatbázisban tárolva PSM CREATE PROCEDURE name(parameters) local declarations body PL/SQL CREATE (OR REPLACE) PROCEDURE name(parameters) local declarations
Adatbázis Rendszerek II. 4. PLSQL Kurzorok, hibakezelés 53/1B IT MAN
Adatbázis Rendszerek II. 4. PLSQL Kurzorok, hibakezelés 53/1B IT MAN B IT v: 2017.03.02 MAN A PL/SQL alapjai Adatok kezelése Kurzorok Hibakezelés 53/2 B IT MAN Adatok kezelése PL/SQL-ben Műveletek: Írás
A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai
8. gyakorlat Structured Query Language Struktúrált lekérdező nyelv A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai DDL (Data Definition Language) adatstruktúra definiáló
Java II. I A Java programozási nyelv alapelemei
Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve
Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)
Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány) 23/1 B IT v: 2018.10.31 MAN DML adatokon műveletet végző utasítások DML Data Manipulation Language Rekordok (sorok) beszúrása (felvitele) Mezők
Adatbázis kezelés Delphiben. SQL lekérdezések
Adatbázis kezelés Delphiben. SQL lekérdezések Structured Query Language adatbázisok kezelésére szolgáló lekérdező nyelv Szabályok: Utasítások tetszés szerint tördelhetők Utasítások végét pontosvessző zárja
Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet
Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet 26/1 B IT v: 2018.02.21 MAN Gyakorló környezet apex.oracle.com/en/ 26/2 A regisztrációs folyamat 26/3 26/4 26/5 26/6 26/7 26/8 26/9 26/10 26/11 Feladatok
ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu
ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu Számonkérés 2 Papíros (90 perces) zh az utolsó gyakorlaton. Segédanyag nem használható Tematika 1. félév 3 Óra Dátum Gyakorlat 1. 2010.09.28.
Programozás alapjai. 5. előadás
5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk
Adattípusok. Max. 2GByte
Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY / MONEY 8
Adatbázis Rendszerek II. 2. Gyakorló környezet
Adatbázis Rendszerek II. 2. Gyakorló környezet 37/1 B IT v: 2017.02.11 MAN Gyakorló környezet Géptermek 37/2 Jelszó váltás 1 2 3 4 37/3 Gyakorló környezet II. apex.oracle.com/en/ 37/4 A regisztrációs folyamat
Adattípusok. Max. 2GByte
Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE TINIINT 1 byte 12 SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY
Vezérlési szerkezetek
Vezérlési szerkezetek Szelekciós ok: if, else, switch If Segítségével valamely ok végrehajtását valamely feltétel teljesülése esetén végezzük el. Az if segítségével valamely tevékenység () végrehajtását
Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A 1-1
Adatbázisok II. 1 Jánosi-Rancz Katalin Tünde tsuto@ms.sapientia.ro 327A 1-1 Ajánlott irodalom Ullman-Widom: Adatbázisrendszerek. Alapvetés (Második, átdolgozott kiad), Panem, 2008. november (bővítés pl.uml,
Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)
Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK) http://sila.hajas.elte.hu/ 7.ea: SQL/PSM Oracle PL/SQL Az előadások Ullman-Widom: Adatbázisrendszerek Alapvetés alapján készültek, forrás: http://infolab.stanford.edu/~ullman/dscb.html
Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.
Táblakezelés: Open SQL Internal table Tarcsi Ádám: Az SAP programozása 1. OPEN SQL Tarcsi Ádám, ELTE SAP Excellence Center: SAP programozás oktatóanyag 2 Open SQL Az Open SQL kulcsszavai: SELECT INSERT
SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
SQL ALAPOK Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai BEVEZETÉS SQL: Structured Query Language Strukturált Lekérdező Nyelv Szabvány határozza meg, azonban számos nyelvjárása létezik
Adatbázisok elmélete 9. előadás
Adatbázisok elmélete 9. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE
8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:
8. Gyakorlat SQL SQL: Structured Query Language; a relációs adatbáziskezelők szabványos, strukturált lekérdező nyelve SQL szabványok: SQL86, SQL89, SQL92, SQL99, SQL3 Az SQL utasításokat mindig pontosvessző
Készítette: Nagy Tibor István
Készítette: Nagy Tibor István A változó Egy memóriában elhelyezkedő rekesz Egy értéket tárol Van azonosítója (vagyis neve) Van típusa (milyen értéket tárolhat) Az értéke értékadással módosítható Az értéke
SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások
SQL haladó Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások 1 Külső összekapcsolás Összekapcsoljuk R és S relációkat: R C S. R azon sorait,
Kivételkezelés 2. SQLCODE lehetséges értékei:
Kivételkezelés Kivételkezelés 1 Futási időben bekövetkező hibák beépített (futtató rendszer váltja ki): előre definiált nem előre definiált felhasználói Az előre definiált és a felhasználói kivételeknek
ADATBÁZISOK gyakorlat: SQL 2. rész SELECT
ADATBÁZISOK 9-10. gyakorlat: SQL 2. rész SELECT SELECT utasítás általános alakja SELECT [DISTINCT] oszloplista FROM táblanévlista [WHERE feltétel] [GROUP BY oszloplista [HAVING feltétel] ] [ORDER BY oszloplista];
OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.
OO PDO PDO VS MYSQLi VS MYSQL ================================================================================ A PHP mysql metódusai elavultak, helyette lehet hazsnálni a MYSQLi metódusokat, amelyek szinte
Adatbázisok-1 előadás Előadó: dr. Hajas Csilla
Adatbázisok-1 előadás Előadó: dr. Hajas Csilla Áttekintés az I.zh-ig Áttekintés az 1ZH-ig // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1 Hol tartunk? Mit tanultunk
Programozási nyelvek a közoktatásban alapfogalmak II. előadás
Programozási nyelvek a közoktatásban alapfogalmak II. előadás Szintaxis, szemantika BNF szintaxisgráf absztrakt értelmező axiomatikus (elő- és utófeltétel) Pap Gáborné. Szlávi Péter, Zsakó László: Programozási
Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r
Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 3. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért
PL/SQL feladatok 8. gyakorlat
1. feladat PLSQL feladatok 8. gyakorlat Változóhasználat (I. az SQL*Plus felhasználói változói, II. az SQL*Plus környezeti változói, III. a PLSQL (belsõþ) változói). Az adatok képernyõþre való kiíratása
Kliens oldali SQL-API
Adatbázis rendszerek I mysql SQL program API ME- GEIAL Dr. Kovács Lászl szló Üzleti logika elhelyezése adatbázis Kliens üzleti logika Nagy hálózati forgalom Decentralizált lt karbantartás Lassabb végrehajt
Forráskód formázási szabályok
Forráskód formázási szabályok Írta: Halmai Csongor, Webcenter Bt. A php és html kódrészletek Ugyanazon fájlon belül nem szerepelhet php kód és html tartalom. E kettő különválasztására smarty-t vagy más
Adatbázisok elmélete 9. előadás
Adatbázisok elmélete 9. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE
A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1
A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található meg. A CD-melléklet használata Bevezetés xi xiii 1. Elméleti áttekintés 1 1.1. Adatmodellezés 3 1.2. Táblák, oszlopok és sorok
Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14
Adatbázisok 9. gyakorlat SQL: SELECT 2015. október 26. 2015. október 26. Adatbázisok 1 / 14 SQL SELECT Lekérdezésre a SELECT utasítás szolgál, mely egy vagy több adattáblából egy eredménytáblát állít el
Webprogramozás szakkör
Webprogramozás szakkör Előadás 5 (2012.04.09) Programozás alapok Eddig amit láttunk: Programozás lépései o Feladat leírása (specifikáció) o Algoritmizálás, tervezés (folyamatábra, pszeudokód) o Programozás
Adatbázisok II. Jánosi-Rancz Katalin Tünde tsuto@ms.sapientia.ro 327A
Adatbázisok II. 7 Jánosi-Rancz Katalin Tünde tsuto@ms.sapientia.ro 327A Oracle XML 7 Oracle XML DB Az XML adatok kezelésére az Oracle egy külön komponenst készített, az Oracle XML DB-t. Az XML adatok tárolására
Osztályok. 4. gyakorlat
Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum
2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér
Funkcionális programozás 2. el adás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2019, tavaszi félév Mir l volt szó? Követelmények, osztályozás Programozási
A C programozási nyelv I. Bevezetés
A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,
SQL OO elemei aktív komponensek
Adatbázisok MSc 7. téma SQL OO elemei aktív komponensek UDT aktív elemek Az UDT egyik fontos jellemzője az egységbezárás, mely az állapot és viselkedés együttesét jelenti mezők UDT metódusok Az SQL szabvány
Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r
Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. február 18. Minimum és maximumkeresés u s i n g n a m e s p a c e s t d ; i n t main ( ) { c o u t
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 2. Előadás: Tárolt eljárások
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 2. Előadás: Tárolt eljárások 1 Tárolt eljárások MySQL-ben Tárolt eljárások definíciója Tárolt rutinok használata (eljárások
Az SQL adatbázisnyelv: DML
Az SQL adatbázisnyelv: DML Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 6.5. Az adatbázis tartalmának módosítása (DML utasítások) INSERT, DELETE, UPDATE
Kifejezések. Kozsik Tamás. December 11, 2016
Kifejezések Kozsik Tamás December 11, 2016 Kifejezések Lexika Szintaktika Szemantika Lexika azonosítók (változó-, metódus-, típus- és csomagnevek) literálok operátorok, pl. + zárójelek: (), [], {},
Adatbázis-lekérdezés. Az SQL nyelv. Makány György
Adatbázis-lekérdezés Az SQL nyelv Makány György SQL (Structured Query Language=struktúrált lekérdező nyelv): relációs adatbázisok adatainak visszakeresésére, frissítésére, kezelésére szolgáló nyelv. Születési
LBRA6i integrált rendszer
LBRA6i integrált rendszer LIBRA 6i logolás és a log megtekintése Készítette: Libra Szoftver Zrt. Létrehozás dátuma: 2005.12.15. Utolsó módosítás: 2014.10.30. Referencia szám: LIBRA6i_UZEM_V_1.5 Verzió:
Adatbázis-kezelés. Harmadik előadás
Adatbázis-kezelés Harmadik előadás 39 Műveletek csoportosítása DDL adat definiálás Objektum létrehozás CREATE Objektum törlés DROP Objektum módosítás ALTER DML adat módosítás Rekord felvitel INSERT Rekord
Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.
Adatbázis létrehozása Adatleíró műveletek CREATE DATABASE "tan1" WITH ENCODING= LATIN2 ; vagy parancssorból a terminál alatt $ createdb tan1 E=latin2 Kapcsolódás az adatbázishoz $ psql tan1 Adattábla létrehozása
A C# programozási nyelv alapjai
A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök
Programozási nyelvek I. (Az Ada) Kozsik Tamás
Programozási nyelvek I. (Az Ada) Kozsik Tamás kto@elte.hu http://kto.web.elte.hu/ A tárgy célja A programozási nyelvek alapfogalmainak bemutatása Az előadásokon Számonkérjük zh-kal és a Szoftverszigorlaton
Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double
Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -1- Mit tudunk már? Típus fogalma char, int, float,
A C programozási nyelv I. Bevezetés
A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,
SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére
SQL PÉLDATÁR készült a PTE TTK Iskolai informatika III. kurzus teljesítésére PTE TTK Czimmermann Gergely MA matematika informatika tanár szakos hallgató 2017 Tartalomjegyzék 1. Adatleíró műveletek... 3
Lekérdezések az SQL SELECT utasítással
Lekérdezések az SQL SELECT utasítással Az SQL SELECT utasítás lehetőségei Vetítés Kiválasztás 1. tábla 1. tábla Összekapcsolás 1. tábla 2. tábla Elemi SELECT utasítások SELECT * {[DISTINCT] column expression
Informatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009
Adatbázisok elleni fenyegetések rendszerezése Fleiner Rita BMF/NIK Robothadviselés 2009 Előadás tartalma Adatbázis biztonsággal kapcsolatos fogalmak értelmezése Rendszertani alapok Rendszerezési kategóriák
Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)
Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Mit tudunk már? Típus fogalma char, int, float, double változók deklarációja operátorok (aritmetikai, relációs, logikai,
Összetett típusok Rekordtípus
Összetett típusok Összetett típusok Rekordtípus Rekordtípus deklarációja: TYPE név IS RECORD ( mezőnév típus [[NOT NULL] {:= DEFAULT} kifejezés] [, mezőnév típus [[NOT NULL] {:= DEFAULT} kifejezés]] );
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 3. Előadás: Tárolt eljárások (folytatás) Nézetek
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 3. Előadás: Tárolt eljárások (folytatás) Nézetek 1 Kurzorok A kurzorok használata támogatott a tárolt rutinok, triggerek
Web-technológia PHP-vel
Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19 Szuperglobális változók $ GET : request
AWK programozás, minták, vezérlési szerkezetek
10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa
Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések
Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 2.4. Relációs algebra (áttekintés) 5.1.
Adatbázisok 1 2013-14 tavaszi félév Vizsgatételsor
Adatbázisok 1 2013-14 tavaszi félév Vizsgatételsor 1. Relációs adatmodell alapjai Adatmodell: Az adatmodell egy jelölésmód egy adatbázis adatszerkezetének a leírására, beleértve az adatra vonatkozó megszorításokat
Adatbázis használat I. 5. gyakorlat
Adatbázis használat I. 5. gyakorlat Tudnivalók Jövő hétre a normalizálást hozni vagy e- mailben beküldeni! 7. héten (= két hét múlva!) nagyzh + FF checkpoint: adattáblák feltöltése, megszorítások 2010.
BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei
1. Mi az elsődleges következménye a gyenge logikai redundanciának? inkonzisztencia veszélye felesleges tárfoglalás feltételes függés 2. Az olyan tulajdonság az egyeden belül, amelynek bármely előfordulása
Oracle Audit Vault and Database Firewall. Gecseg Gyula Oracle DBA
Oracle Audit Vault and Database Firewall Gecseg Gyula Oracle DBA TÖBB FENYEGETETTSÉG MINT VALAHA TÖBB FENYEGETETTSÉG MINT VALAHA A támadások 70%-a tűzfalon belülről jön A támadások 90%-át hozzáféréssel
Adatbázis használata PHP-ből
Adatbázis használata PHP-ből Adatbázis használata PHP-ből...1 Nyílt forráskódú adatbázisok...1 A mysql függvények...2 A mysqli függvények...4 Bináris adatok adatbázisban való tárolása...8 Adatbázis csatoló