Adatbázisok Féléves feladat ElectroShop
Kalácska Dávid F2VEHC AB01
2013
Tartalomjegyzék Normalizálás .......................................................................................................................................... 3 Az ősmodell relációsémája .............................................................................................................................3 Függőségek .....................................................................................................................................................4 Függőségek normalizálása..............................................................................................................................4 Az eredmény adatmodell felírása...................................................................................................................5 Idegen kulcsok ................................................................................................................................................5 Táblák létrehozása és feltöltése .............................................................................................................. 6 Táblák létrehozása..........................................................................................................................................6 Táblák feltöltése .............................................................................................................................................7 Táblák listázása .............................................................................................................................................11 Triggerek létrehozása ........................................................................................................................... 13 Triggerek tesztelése.............................................................................................................................. 14 APEX alkamazás létrehozása ................................................................................................................. 15 Táblák lap létrehozása ..................................................................................................................................15 SQL parancsok lap létrehozása .....................................................................................................................17 Lekérdezések lap létrehozása.......................................................................................................................19 Adatok szerkesztése lap létrehozása............................................................................................................23 Statisztikák lap létrehozása ..........................................................................................................................24 Vásárlói szokások lap létrehozása ................................................................................................................25 Jogosultságok és hozzáférések beállítás ......................................................................................................28 Csoportok létrehozása..............................................................................................................................28 Felhasználók létrehozása .........................................................................................................................28 Alkalmazás hozzáférések beállítása .........................................................................................................28 Alkalmazás telepítése ........................................................................................................................... 29 Adattáblák létrehozása.................................................................................................................................29 Trigger létrehozása .......................................................................................................................................29 Vásárlói szokásokhoz tartozó könyvtár importálása ....................................................................................29 Adattáblák feltöltése ....................................................................................................................................30 Felhasználók létrehozása .............................................................................................................................30 Alkalmazás importálása ................................................................................................................................30 Elkészült alkalmazás áttekintése ........................................................................................................... 31 Bejelentekezési oldal ....................................................................................................................................31 Táblák oldal ..................................................................................................................................................31 SQL utasítások oldal .....................................................................................................................................32 Lekérdezések oldal .......................................................................................................................................33 Adatok szerkesztése oldal ............................................................................................................................33 Statisztikák oldal ...........................................................................................................................................34 Vásárlói szokások oldal .................................................................................................................................35 Irodalomjegyzék ................................................................................................................................... 36 Mellékletek .......................................................................................................................................... 36
2
Normalizálás Feltételezzük, hogy: A gyártó és a típus egyértelműen azonosítja a terméket. Az e-mail cím egyértelműen azonosítja a felhasználót. Az idő és az e-mail cím egyértelműen azonosítja a megrendelést. Az idő, az e-mail cím, a gyártó és a típus egyértelműen azonosítja a megrendelt terméket. Egy e-mail címről egy időben csak egy rendelés lehetséges.
Az ősmodell relációsémája Webshop
ahol:
gyártó: a termék gyártója
típus: a termék típusa
megnevezés: a termék megnevezése
ár: a termék ára (0 érték esetén a termék nem kapható)
leírás: a termék leírása (pl.: paraméterek, rövid ismertető…)
garancia: a termékre adott garancia (hónap)
pont: a termék megvásárlása esetén a felhasználó ennyi vásárlói pontot kap
email: a felhasználó e-mail címe
név: a felhasználó teljes neve
regisztráció_dátuma: a felhasználó regisztrálási dátuma
cím: a felhasználó lakcíme
jelszó: a felhasználó jelszava (kódolva)
pontok: a felhasználó által kapott vásárlói pontok (null -> még nem kapott pontot, 0 -> már kapott pontot, de elfogyott neki)
idő: a rendelés ideje (év-hónap-nap óra:perc:másodperc)
megjegyzés: megjegyzés a rendeléshez
kapott_pont: a rendelés után kapott vásárlói pont
szállítási_cím: a rendelés szállítási címe (nem feltétlenül egyezik meg a felhasználó lakcímével)
szállítás_típus: a szállítás típusa (pl.: személyes átvétel, futárszolgálat, pick-pack pontos átvétel…)
szállítási_költség: a szállítás költsége (személyes átvétel esetén 0 is lehet)
3
rendelés_ár: a rendelt termék rendeléskori ára (nem feltétlenül egyezik a termék aktuális árával, ezért van szükség rá)
db: a rendelt termék darabszáma
Függőségek Ffelhasználók = {email}=>{név, regisztráció_dátuma, cím, jelszó, pontok} Ftermékek = {gyártó, típus}=>{megnevezés, ár, leírás, garancia, pont} Frendelések = {email, szállítási_költség}
idő}=>{megjegyzés,
kapott_pont,
szállítási_cím,
szállítás_típus,
Frendelt_termékek = {gyártó, típus, email, idő}=>{rendelés_ár, db}
Függőségek normalizálása Ffelhasználók:
1NF-ben van, mert nincs benne összetett attribútum.
2NF-ben van, mert 1NF-ben van és a másodlagos attribútumok mindegyike az elsődleges attribútumok mindegyikétől függ. 3NF-ben van, mert 2NF-ben van és a másodlagos attribútumok között nincs függés. BCNF-ben van, mert 3NF-ben van és nincs kulcstörés. Ftermékek: 1NF-ben van, mert nincs benne összetett attribútum. 2NF-ben van, mert 1NF-ben van és a másodlagos attribútumok mindegyike az elsődleges attribútumok mindegyikétől függ. 3NF-ben van, mert 2NF-ben van és a másodlagos attribútumok között nincs függés. BCNF-ben van, mert 3NF-ben van és nincs kulcstörés. Frendelések:
1NF-ben van, mert nincs benne összetett attribútum.
2NF-ben van, mert 1NF-ben van és a másodlagos attribútumok mindegyike az elsődleges attribútumok mindegyikétől függ. 3NF-ben van, mert 2NF-ben van és a másodlagos attribútumok között nincs függés. BCNF-ben van, mert 3NF-ben van és nincs kulcstörés.
4
Frendelt_termékek:
1NF-ben van, mert nincs benne összetett attribútum.
2NF-ben van, mert 1NF-ben van és a másodlagos attribútumok mindegyike az elsődleges attribútumok mindegyikétől függ. 3NF-ben van, mert 2NF-ben van és a másodlagos attribútumok között nincs függés. BCNF-ben van, mert 3NF-ben van és nincs kulcstörés.
Az eredmény adatmodell felírása felhasználók <email, név, cím, regisztráció_dátuma, jelszó, pontok> termékek < gyártó, típus, megnevezés, leírás, ár, garancia, pont> rendelések <email, idő, megjegyzés, kapott_pont, szállítási_cím, szállítás_típus, szállítási_költség> rendelt_termékek
Idegen kulcsok A rendelt_termékek relációban a gyártó és a típus attribútumok a termékek relációra nézve. A rendelt_termékek relációban az email és az idő attribútumok a rendelések relációra nézve. A rendelések relációban az email attribútum a felhasználók relációra nézve.
5
Táblák létrehozása és feltöltése Táblák létrehozása Felhasználók tábla CREATE TABLE felhasználók( email VARCHAR2(40) NOT NULL, név VARCHAR2(40) NOT NULL, cím VARCHAR2(40) NOT NULL, regisztráció_dátuma DATE NOT NULL, jelszó VARCHAR2(40) NOT NULL, pontok NUMBER(4), CONSTRAINT felhasználók_pk PRIMARY KEY (email)) Table created. Termékek tábla CREATE TABLE termékek( gyártó VARCHAR2(40) NOT NULL, típus VARCHAR2(40) NOT NULL, megnevezés VARCHAR2(40) NOT NULL, leírás VARCHAR(400) NOT NULL, ár NUMBER(10) NOT NULL, garancia NUMBER(4), pont NUMBER(3), CONSTRAINT termékek_pk PRIMARY KEY (gyártó, típus)) Table created. Rendelések tábla CREATE TABLE rendelések( email VARCHAR2(40) NOT NULL, idő TIMESTAMP(3) NOT NULL, megjegyzés VARCHAR2(100), kapott_pont NUMBER(4) NOT NULL, szállítási_cím VARCHAR2(40), szállítás_típus VARCHAR2(20), szállítási_költség NUMBER(5), CONSTRAINT rendelések_pk PRIMARY KEY (email, idő), CONSTRAINT rendelések_fk FOREIGN KEY (email) REFERENCES felhasználók(email)) Table created. Rendelt_termékek tábla CREATE TABLE rendelt_termékek( gyártó VARCHAR2(40) NOT NULL, típus VARCHAR2(40) NOT NULL, email VARCHAR2(40) NOT NULL, 6
idő TIMESTAMP(3) NOT NULL, ár NUMBER(10) NOT NULL, db NUMBER(4) NOT NULL, CONSTRAINT rendelt_termékek_pk PRIMARY KEY (gyártó, típus, email, idő), CONSTRAINT rendelt_termékek_fk1 FOREIGN KEY (gyártó, típus) REFERENCES termékek (gyártó, típus), CONSTRAINT rendelt_termékek_fk2 FOREIGN KEY (email,idő) REFERENCES rendelések (email,idő)) Table created.
Táblák feltöltése Felhasználók tábla INSERT INTO felhasználók VALUES('[email protected]', 'Kiss Béla', '5432 Kislőd, Rátóti út 21.', to_date('2013-01-11','YYYY-MM-DD'), 'jelszavam', 30) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Farkas József', '2121 Fót, Fő tér 3.', to_date('2012-10-20','YYYY-MM-DD'), 'jelszavam', null) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Gáspár Gergő', '4170 Debrecen, Petőfi Sándor utca 41/b', to_date('2011-07-30','YYYY-MM-DD'), 'jelszavam', 0) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Óvárosi Péter', '4142 Eger, Dobó u. 2.', to_date('2009-03-09','YYYY-MM-DD'), 'jelszavam', 14) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Képes László', '2600 Vác, Kossuth Lajos utca 11.', to_date('2010-05-27','YYYY-MM-DD'), 'jelszavam', 130) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Guttin Péter', '6644 Mohora, Nagy Sándor út 12.', to_date('2013-08-29','YYYY-MM-DD'), 'jelszavam', 74) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Halasi Géza', '7654 Nyíregyháza, Debreceni út 144.', to_date('2011-02-26','YYYY-MM-DD'), 'jelszavam', null) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Várcsa Elemér', '2654 Göd, Fő tér 11.', to_date('2008-05-16','YYYY-MM-DD'), 'jelszavam', 240) 1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Bojtos Beáta', '7631 Szeged, Pesti út 260.', to_date('2013-04-01','YYYY-MM-DD'), 'jelszavam', 50)
7
1 row(s) inserted. INSERT INTO felhasználók VALUES('[email protected]', 'Lombos Kitti', '9832 Szarvas, Lehel út 54.', to_date('2012-03-25','YYYY-MM-DD'), 'jelszavam', 70) 1 row(s) inserted. Termékek tábla INSERT INTO termékek VALUES('Asus', 'p5kc', 'kombó alaplap', 'Vadonatúj technológiával készült, ddr2 és ddr3 memóriákat is támogató alaplap.', 23400, 24, 10) 1 row(s) inserted. INSERT INTO termékek VALUES('Asus', 'gtx640', 'videókártya 2GB', 'Játékra tökéletes videókártya.', 29900, 12, 15) 1 row(s) inserted. INSERT INTO termékek VALUES('Samsung', 'p5dwks', '1TB 3,5” merevlemez', 'Nagy fordulatszámú és alacsony hozzáférési idejű merevlemez a Samsungtól!', 11870, 36, 6) 1 row(s) inserted. INSERT INTO termékek VALUES('Philips', 'dvdk327', 'Dvd író-olvasó', 'Egyszerű, gyors, olcsó.', 3400, 48, 3) 1 row(s) inserted. INSERT INTO termékek VALUES('Gamershole', 'atxjk6', 'ATX gépház', 'Rengeteg csatlakozási lehetőség, elegáns dizájn.', 8900, null, 12) 1 row(s) inserted. INSERT INTO termékek VALUES('Kingmax', '6740rm', 'DDR3 memória 4GB', 'Ajándék hűtőbordával a tökéletes működésért.', 14000, 240, 15) 1 row(s) inserted. INSERT INTO termékek VALUES('Intel', 'corei7mtk-2740', 'Core i7 processzor 3,8 Ghz 16MB L2 cache', 'Az intel legújabb processzora.', 65000, 48, 40) 1 row(s) inserted. INSERT INTO termékek VALUES('PQS', 'ts500w', '500W tápegység passzív hűtéssel', 'Passzív hűtéssel rendelkező tápegység a tökéletes csendért.', 18400, 24, 20) 1 row(s) inserted. INSERT INTO termékek VALUES('Sony', '26fhd', '1080p 26 colos monitor', 'Tökéletes képminőség, beépített hangszórók, hdmi, kell ennél több?', 37000, 12, 32) 1 row(s) inserted. INSERT INTO termékek VALUES('HP', 'deskjet3460', 'multifunkciós nyomtató WIFI', 'Vezetéknélküli nyomtatás is lehetséges vele.', 30000, 24, 26) 1 row(s) inserted. Rendelések tábla
8
INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2012-11-24 12.41.56', 'YYYY-MM-DD HH24.MI.SS'), 'délután kérek szállítást', 19, '5432 Kislőd, Rátóti út 21.', 'futár', 3400) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2012-12-05 14.05.11', 'YYYY-MM-DD HH24.MI.SS'), null, 64, null, 'személyes átvétel', 0) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2013-03-17 11.39.11', 'YYYY-MM-DD HH24.MI.SS'), 'megjegyzés', 55, null, 'személyes átvétel', 0) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2012-04-28 08.59.10', 'YYYY-MM-DD HH24.MI.SS'), 'Kérem jól csomagolják be!', 26, '4170 Debrecen, 21. számú pick-pack pont', 'pick-pack pont', 800) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2013-03-11 14.04.38', 'YYYY-MM-DD HH24.MI.SS'), null, 36, '4142 Eger, 1. számú pick-pack pont', 'pick-pack pont', 800) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2012-12-20 18.34.01', 'YYYY-MM-DD HH24.MI.SS'), 'Karácsonyi ajándék lenne, kérem mielőbbi kiszállítását. Köszönöm!', 3, '2600 Vác, Kossuth Lajos utca 11.', 'futár', 3400) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2012-12-21 08.12.54', 'YYYY-MM-DD HH24.MI.SS'), null, 25, '2600 Vác, Kossuth Lajos utca 11.', 'futár', 3400) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2013-10-05 11.43.30', 'YYYY-MM-DD HH24.MI.SS'), null, 6, null, 'személyes átvétel', 0) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2012-09-15 17.33.20', 'YYYY-MM-DD HH24.MI.SS'), 'Kérem igyekezzenek a szállítással!', 80, '7654 Nyíregyháza, Debreceni út 144.', 'futár', 3400) 1 row(s) inserted. INSERT INTO rendelések VALUES('[email protected]', to_timestamp('2012-10-01 15.41.10', 'YYYY-MM-DD HH24.MI.SS'), null, 15, '7654 Nyíregyháza, Debreceni út 144.', 'futár', 3400) 1 row(s) inserted. Rendelt_termékek tábla INSERT INTO rendelt_termékek VALUES('Asus', 'p5kc', '[email protected]', to_timestamp('2012-11-24 12.41.56', 'YYYY-MM-DD HH24.MI.SS'), 23400, 1)
9
1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Samsung', 'p5dwks', '[email protected]', to_timestamp('2012-11-24 12.41.56', 'YYYY-MM-DD HH24.MI.SS'), 11870, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Philips', 'dvdk327', '[email protected]', to_timestamp('2012-11-24 12.41.56', 'YYYY-MM-DD HH24.MI.SS'), 3400, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Sony', '26fhd', '[email protected]', to_timestamp('2012-12-05 14.05.11', 'YYYY-MM-DD HH24.MI.SS'), 37000, 2) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Intel', 'corei7mtk-2740', '[email protected]', to_timestamp('2013-03-17 11.39.11', 'YYYY-MM-DD HH24.MI.SS'), 65000, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Kingmax', '6740rm', '[email protected]', to_timestamp('2013-03-17 11.39.11', 'YYYY-MM-DD HH24.MI.SS'), 14000, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('HP', 'deskjet3460', '[email protected]', to_timestamp('2012-04-28 08.59.10', 'YYYY-MM-DD HH24.MI.SS'), 30000, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Gamershole', 'atxjk6', '[email protected]', to_timestamp('2013-03-11 14.04.38', 'YYYY-MM-DD HH24.MI.SS'), 8900, 3) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Philips', 'dvdk327', '[email protected]', to_timestamp('2012-12-20 18.34.01', 'YYYY-MM-DD HH24.MI.SS'), 5000, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Asus', 'p5kc','[email protected]', to_timestamp('2012-12-21 08.12.54', 'YYYY-MM-DD HH24.MI.SS'), 14000, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Asus', 'gtx640','[email protected]', to_timestamp('2012-12-21 08.12.54', 'YYYY-MM-DD HH24.MI.SS'), 30000, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Samsung', 'p5dwks', '[email protected]', to_timestamp('2013-10-05 11.43.30', 'YYYY-MM-DD HH24.MI.SS'), 11870, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Intel', 'corei7mtk-2740', '[email protected]', to_timestamp('2012-09-15 17.33.20', 'YYYY-MM-DD HH24.MI.SS'), 65000, 1) 1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('PQS', 'ts500w', '[email protected]', to_timestamp('2012-09-15 17.33.20', 'YYYY-MM-DD HH24.MI.SS'), 18400, 2)
10
1 row(s) inserted. INSERT INTO rendelt_termékek VALUES('Kingmax', '6740rm', '[email protected]', to_timestamp('2012-10-01 15.41.10', 'YYYY-MM-DD HH24.MI.SS'), 14000, 1) 1 row(s) inserted.
Táblák listázása SELECT * FROM felhasználók EMAIL
NÉV
CÍM
REGISZTRÁC IÓ_DÁTUMA
JELSZÓ
PONT OK
[email protected]
Kiss Béla
5432 Kislőd, Rátóti út 21.
01/11/2013
jelszavam
30
[email protected]
Farkas József
2121 Fót, Fő tér 3.
10/20/2012
jelszavam
-
[email protected]
Gáspár Gergő
4170 Debrecen, Petőfi Sándor utca 41/b
07/30/2011
jelszavam
0
[email protected]
Óvárosi Péter
4142 Eger, Dobó u. 2.
03/09/2009
jelszavam
14
[email protected]
Képes László
2600 Vác, Kossuth Lajos utca 11.
05/27/2010
jelszavam
130
[email protected]
Guttin Péter
6644 Mohora, Nagy Sándor út 12.
08/29/2013
jelszavam
74
[email protected]
Halasi Géza
7654 Nyíregyháza, Debreceni út 144.
02/26/2011
jelszavam
-
[email protected]
Várcsa Elemér
2654 Göd, Fő tér 11.
05/16/2008
jelszavam
240
[email protected]
Bojtos Beáta
7631 Szeged, Pesti út 260.
04/01/2013
jelszavam
50
[email protected]
Lombos Kitti
9832 Szarvas, Lehel út 54.
03/25/2012
jelszavam
70
10 rows returned in 0.00 seconds SELECT * FROM termékek GYÁRTÓ
TÍPUS
MEGNEVEZÉS
Asus
p5kc
kombó alaplap
Asus
gtx640
videókártya 2GB
Samsung
p5dwks
1TB 3,5” merevlemez
LEÍRÁS Vadonatúj technológiával készült, ddr2 és ddr3 memóriákat is támogató alaplap. Játékra tökéletes videókártya. Nagy fordulatszámú és alacsony hozzáférési idejű merevlemez a Samsungtól!
11
GARANCIA
PO NT
23400
24
10
29900
12
15
11870
36
6
ÁR
Philips
dvdk32 7
Kingmax
6740rm
Intel
corei7 mtk2740
PQS
ts500w
Sony
26fhd
1080p 26 colos monitor
HP
deskjet 3460
multifunkciós nyomtató WIFI
Gamershol e
atxjk6
ATX gépház
Dvd író-olvasó
Egyszerű, gyors, olcsó.
3400
48
3
DDR3 memória 4GB Core i7 processzor 3,8 Ghz 16MB L2 cache 500W tápegység passzív hűtéssel
Ajándék hűtőbordával a tökéletes működésért.
14000
240
15
Az intel legújabb processzora.
65000
48
40
18400
24
20
37000
12
32
30000
24
26
8900
-
12
Passzív hűtéssel rendelkező tápegység a tökéletes csendért. Tökéletes képminőség, beépített hangszórók, hdmi, kell ennél több? Vezetéknélküli nyomtatás is lehetséges vele. Rengeteg csatlakozási lehetőség, elegáns dizájn.
10 rows returned in 0.08 seconds SELECT * FROM rendelések MEGJEGYZÉ S
KAPOT T_PON T
SZÁLLÍTÁSI_CÍ M
SZÁLLÍ TÁS_TÍP US
SZÁLLÍT ÁSI_KÖL TSÉG
24-NOV-12 12.41.56.000 PM 05-DEC-12 02.05.11.000 PM 17-MAR-13 11.39.11.000 AM
délután kérek szállítást
19
5432 Kislőd, Rátóti út 21.
futár
3400
-
32
-
megjegyzés
55
-
ggergo23@indam ail.hu
28-APR-12 08.59.10.000 AM
Kérem jól csomagolják be!
26
xpert96@hotmail .com
11-MAR-13 02.04.38.000 PM
-
36
[email protected] m
20-DEC-12 06.34.01.000 PM
Karácsonyi ajándék lenne, kérem mielőbbi kiszállítását. Köszönöm!
3
[email protected] m guttinp@indamail .hu
21-DEC-12 08.12.54.000 AM 05-OCT-13 11.43.30.000 AM
-
halasi@freemail. hu halasi@freemail. hu
EMAIL
IDŐ
kiss.bela@invitel. hu kiss.bela@invitel. hu [email protected] m
4170 Debrecen, 21. számú pickpack pont 4142 Eger, 1. számú pick-pack pont
személyes átvétel személyes átvétel
0 0
pick-pack pont
800
pick-pack pont
800
2600 Vác, Kossuth Lajos utca 11.
futár
3400
25
2600 Vác, Kossuth Lajos utca 11.
futár
3400
-
6
-
személyes átvétel
0
15-SEP-12 05.33.20.000 PM
Kérem igyekezzenek a szállítással!
80
7654 Nyíregyháza, Debreceni út 144.
futár
3400
01-OCT-12 03.41.10.000 PM
-
15
7654 Nyíregyháza, Debreceni út 144.
futár
3400
10 rows returned in 0.01 seconds 12
SELECT * FROM rendelt_termékek GYÁRTÓ Asus Samsung Philips Sony Intel Kingmax HP Gamershole Philips Asus Asus Samsung Intel PQS Kingmax
TÍPUS p5kc p5dwks dvdk327 26fhd corei7mtk-2740 6740rm deskjet3460 atxjk6 dvdk327 p5kc gtx640 p5dwks corei7mtk-2740 ts500w 6740rm
EMAIL [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
IDŐ 24-NOV-12 12.41.56.000 PM 24-NOV-12 12.41.56.000 PM 24-NOV-12 12.41.56.000 PM 05-DEC-12 02.05.11.000 PM 17-MAR-13 11.39.11.000 AM 17-MAR-13 11.39.11.000 AM 28-APR-12 08.59.10.000 AM 11-MAR-13 02.04.38.000 PM 20-DEC-12 06.34.01.000 PM 21-DEC-12 08.12.54.000 AM 21-DEC-12 08.12.54.000 AM 05-OCT-13 11.43.30.000 AM 15-SEP-12 05.33.20.000 PM 15-SEP-12 05.33.20.000 PM 01-OCT-12 03.41.10.000 PM
ÁR 23400 11870 3400 37000 65000 14000 30000 8900 5000 14000 30000 11870 65000 18400 14000
DB 1 1 1 2 1 1 1 3 1 1 1 1 1 2 1
15 rows returned in 0.02 seconds
Triggerek létrehozása A termékek táblában van egy pont tulajdonság, ami ugyan nincs közvetlen összefüggésben a termék árával, de valamelyest arányos vele. Azt szeretném elérni, hogy termék árának a módosításakor az adott termékhez tartozó pont is változzon ugyanabban a mértékben, mint amekkora mértékben a termék ára változott (%). Mindez csak akkor történjen meg, ha a frissítésben nem változtattuk a pontot. A trigger létrehozása (Triggerek.sql): CREATE OR REPLACE TRIGGER pontvalto BEFORE UPDATE OF ár ON termékek FOR EACH ROW BEGIN IF :NEW.ár!=:OLD.ár and :NEW.pont=:OLD.pont THEN :NEW.pont:=:OLD.pont*(:NEW.ár/:OLD.ár); END IF; END;
Trigger created 0.16 seconds. A rendelt_termékek tábla kapcsolatban áll a termékek táblával, így, ha egy terméket el szeretnénk távolítani a rendelésünkből törlődik a termékre mutató hivatkozás, ez inkonzisztenciát okozna. A tábla szerkezete ugyan ezt nem teszi lehetővé, de a felhasználót segíthetjük azzal, hogy amikor egy terméket törölni szeretne, tájékoztatjuk arról, hogy a terméket nem tudja törölni, viszont inaktívvá állíthatja az árának 0-ra való állításával. A trigger létrehozása: CREATE OR REPLACE TRIGGER termek_torlo BEFORE DELETE ON termékek FOR EACH ROW DECLARE db NUMBER; BEGIN SELECT COUNT(*) INTO db
13
FROM rendelt_termékek WHERE gyártó=:OLD.gyártó and típus=:OLD.típus; IF db>0 THEN RAISE_APPLICATION_ERROR(-20111, 'Termék nem törölhető, mivel már volt belőle rendelés! A terméket inaktívvá lehet tenni az árának 0-ra állításával.'); END IF; END;
Trigger created 0.24 seconds.
Triggerek tesztelése select * from termékek where gyártó='Philips'
GYÁRTÓ TÍPUS MEGNEVEZÉS Philips
dvdk327 Dvd író-olvasó
LEÍRÁS Egyszerű, gyors, olcsó.
GARANC PON IA T 39000 48 9 ÁR
Statement processed. 0.11 seconds update termékek set ár=13000 where gyártó='Philips'
1 row(s) updated. 0.00 seconds select * from termékek where gyártó='Philips'
GYÁRTÓ TÍPUS MEGNEVEZÉS Philips
dvdk327 Dvd író-olvasó
LEÍRÁS Egyszerű, gyors, olcsó.
GARANC PON IA T 13000 48 3 ÁR
Statement processed. 0.01 seconds delete from termékek where gyártó='Philips'
ORA-20111: Termék nem törölhető, mivel már volt belőle rendelés! A terméket inaktívvá lehet tenni az árának 0-ra állításával. ORA-06512: at "SEMA1.TERMEK_TORLO", line 9 ORA-04088: error during execution of trigger 'SEMA1.TERMEK_TORLO'
14
APEX alkamazás létrehozása A létrehozást az APEX Application builder menüjéből kezdjük el. A "Create" gombra kattintva egyszerűen létrehozhatjuk az alkalmazást. Beállítások: Database application Name: ElectroShop Téma: Sapphire A többi beállítást az alapértéken kell hagyni. Az alkalmazás létrehozását követően a Run gombra kattintva futtathatjuk. Ezután megjelenik a bejelentkező oldal, ahol a következő adatokkal tudunk belépni: Username :magyar Password: Tigris-1 A belépést követően már meg is jelenik az első lap, és a lap alján egy sáv, amiből elérjük a lap beállításait (Edit page).
Táblák lap létrehozása Ezt a lapot nem fogjuk létrehozni, hanem csak az alapértelmezetten létrejött "Home" oldalt fogjuk módosítani. Ehhez a következő helyeken kell átírnunk a címet: Page Rendering blokk o A Title linkre kattintva megjelenik az aktuális oldal beállítása, itt kell átírnunk a címét a következőre: "Táblák". Shared Components blokk (Tabs) o A Home linkre kattintva lehetőségünk van átnevezni az adott fület, ezt tegyük is meg és itt is a cím legyen "Táblák". A lapunk most már megfelelő címmel rendelkezik, úgyhogy nekiláthatunk az oldal belsejének a létrehozásához. Először is hozzunk létre egy új html régiót az oldalon, itt fogjuk kiválasztani, hogy melyik tábla tartalmát szeretnénk listázni. A régió létrehozásának a lépései: "Regions" mező melletti + gombra kattintva tudunk új régiót létrehozni. HTML->HTML A régió neve: Tábla kiválasztása Ezután hozzunk létre egy legördülő listát az előbb létrehozott régiónkon belül:
"Items" melletti + gomb Select List Item name: "P1_X", Region: "Tábla kiválasztása" Label: "Tábla neve:" Page Action when Value Changed: "Submit page", ezzel érjük el, hogy ne kelljen gombot használnunk a kívánt tábla megjelenítéséhez.
15
Ezután pedig a következőképpen állítsuk be a lista tartalmát:
Következő lépésben egy riport régiót (Report region) foguk létrehozni a lekérdezés eredményének a megjelenítésére: Regions + -> Report -> Classic Report Title: "Tábla tartalma" PL/SQL tartalom:
16
Az oldalunk tulajdonképpen már majdnem elkészült, azt leszámítva, hogy az oszlopnevek helyett jelenleg még csak a "col1, col2,…" kifejezések jelennek meg. Ezt egyszerűen módosíthatjuk, ha az utóbb létrehozott régiónk beállításaira megyünk, és ott a "Report Attributes" fülre kattintunk. Itt tudjuk beállítani a riportunk megjelenését. Annyi a teendőnk, hogy a "Headings Type" értékét a "Column Names"-re állítjuk, és így már szépen fog megjelenni a lekérdezésünk eredménye. Az oldalunk elkészült.
SQL parancsok lap létrehozása Az alkalmazásunk főmoduljából hozzunk létre egy új oldalt (create page) a következő beállításokkal: Blank Page Name: "SQL parancsok" Tab Options: "Use an existing tab set and create a new tab within the existing tab set." New Tab Label: "SQL parancsok" Az új oldalunkon állítsuk be a sablont " Application default"-ra, hogy a kinézetünk ugyanolyan legyen, mint az előző oldalon volt. Hozzunk létre egy új régiót a következő paraméterekkel: HTML->HTML Title: Utasítás Ebben a régióban tudjuk majd az SQL utasításainkat leírni, innen tudjuk futtatni őket, és itt fog megjelenni a futási eredmény is. Ehhez létre kell hoznunk a következő elemeket: Utasítás szöveges mező o Items + -> Textarea o Name: "P2_PARANCS" o Label: "Parancs:" Eredmény csak olvasható mező o Items + -> Display Only o Name: "P2_EREDMENY" o Label: "Eredmény:" Rejtett mező az adatok ideiglenes tárolására o Items + -> Hidden o Name: "P2_REJTETT" Futtatás gomb a parancs végrehajtásához o Buttons + o Position: "Create a button displayed among this region's items" o Name: "P2_FUTTAT" o Text Label / Alt: "Futtatás" o Start New Row: No o Action: "Submit Page" Amennyiben szeretnénk elérni, hogy az SQL lekérdezések eredménye meg is jelenjen az oldalunkon, létre kell hoznunk egy riportot a következőképpen:
17
Regions + -> Report -> Classic Report Title: "Eredményhalmaz" SQL Query:
"Use Generic Column Names (parse query at runtime only)" Condition Type beállítása:
Ezzel elértük azt, hogy a riportunk a P2_PARANCS nevű szöveges mezőben lévő sql lekérdezés eredményét fogja nekünk visszaadni. A riportunk csak akkor jelenik meg, ha a P2_REJTETT mezőnk értéke "SELECT". Erre azért van szükség, mert ha nem lekérdezést akarunk végrehajtani, akkor a riportunk hibát fog dobni. A P2_REJTETT értékét egy pl/sql process blokkban fogjuk beállítani, valamint ebben a blokkban fog megtörténni futási eredmény legenerálása is. A blokk létrehozásának lépései: Page Processing -> Processes + -> PL/SQL Name: "Végrehajtás" PL/SQL process: BEGIN :P2_EREDMENY := ''; :P2_REJTETT := UPPER(SUBSTR(:P2_PARANCS,1,6)); EXECUTE IMMEDIATE :P2_PARANCS; IF :P2_REJTETT = 'SELECT' THEN :P2_EREDMENY := 'Lekérdezés végrehajtva.'; ELSIF :P2_REJTETT = 'INSERT' THEN :P2_EREDMENY := 'Beszúrás végrehajtva.'||SQL%ROWCOUNT||' sor került beszúrásra.'; ELSIF :P2_REJTETT = 'DELETE' THEN :P2_EREDMENY := 'Törlés végrehajtva.'||SQL%ROWCOUNT||' sor került törlésre.'; ELSIF :P2_REJTETT = 'UPDATE' THEN :P2_EREDMENY := 'Módosítás végrehajtva.'||SQL%ROWCOUNT||' sor került módosításra.'; ELSIF :P2_REJTETT = 'CREATE' THEN :P2_EREDMENY := 'A kért objektum létrehozva.'; ELSIF :P2_REJTETT = 'ALTER ' THEN :P2_EREDMENY := 'A kért objektum módosítva.'; ELSIF :P2_REJTETT = 'DROP T' THEN :P2_EREDMENY := 'A tábla törölve.'; ELSIF :P2_REJTETT = 'DROP V' THEN :P2_EREDMENY := 'A nézet törölve.'; ELSIF :P2_REJTETT = 'DROP U' THEN :P2_EREDMENY := 'A felhasználó törölve.';
18
ELSE :P2_EREDMENY := 'A kért művelet végrehajtva.'; END IF; EXCEPTION WHEN OTHERS THEN IF SUBSTR(SQLERRM,1,9)='ORA-06535' THEN :P2_EREDMENY := 'Nincs utasítás!'; ELSE :P2_EREDMENY := 'Hiba történt! Kód: '||SQLERRM; END IF; :P2_REJTETT := 'HIBA'; END;
When Button Pressed: "P2_FUTTAT"
Lekérdezések lap létrehozása Az alkalmazásunk főmoduljából hozzunk létre egy új oldalt (create page) a következő beállításokkal: Blank Page Name: "Lekérdezések" Tab Options: "Use an existing tab set and create a new tab within the existing tab set." New Tab Label: "Lekérdezések" Az új oldalunkon állítsuk be a sablont "Application default"-ra, hogy a kinézetünk ugyanolyan legyen, mint az előző oldalakon volt. Ez a lap arra szolgál majd, hogy egyszerűen listázzunk egy internetes web áruházban szükséges hasznos adatokat. A létrehozás vázlatos áttekintése: Rendelések összesítése régió: o Regions + -> HTML -> HTML Title: "Rendelések összesítése" Region Display Selector: Yes o Regions + -> HTML -> HTML Title: "Kritériumok" Parent Region: "Rendelések összesítse (10)" o Regions + -> Report -> Classic Report Title: "Eredmény" Source: select felhasználók.név as "Megrendelő", felhasználók.email as "E-mail", to_char(rendelések.idő,'YYYY-MM-DD') as "Dátum", rendelések.kapott_pont as "Kapott pontok", rendelések.szállítás_típus as "Szállítás típusa", x.countar as "Termékek darabszáma", rendelések.szállítási_költség as "Szállítási költség", x.sumar as "Termékek összege", x.sumar+rendelések.szállítási_költség as "Rendelés végösszege" from rendelések, felhasználók, (select email, idő, sum(ár) as sumar, count(ár) as countar from rendelt_termékek group by (email, idő)) x where felhasználók.email=rendelések.email and
19
felhasználók.email=x.email and rendelések.idő=x.idő and (felhasználók.email=:P3_X or :P3_X='összes' or :P3_X is null) and (rendelések.szállítás_típus=:P3_Y or :P3_Y='összes' or :P3_Y is null) and ((rendelések.idő between :P3_Z and :P3_V) or (:P3_Z is null and :P3_V is not null and rendelések.idő<:P3_V) or (:P3_Z is not null and :P3_V is null and rendelések.idő>:P3_Z) or (:P3_Z is null and :P3_V is null)) order by felhasználók.név
Parent Region: "Rendelések összesítse (10)" o Items + -> Select List Name: "P3_X" Region: "Kritériumok" Label: "E-mail cím:" Null Display Value: "Összes", Null Return Value: "összes" List of values definition: select email a, email b from felhasználók
o Items + -> Select List Name: "P3_Y" Region: "Kritériumok" Label: " Szállítás típusa:" Start New Row: No Null Display Value: "Összes", Null Return Value: "összes" List of values definition: select szállítás_típus a, szállítás_típus b from rendelések group by szállítás_típus
o Items + -> Date Picker Name: "P3_Z" Region: "Kritériumok" Label: "Dátum (tól):" Start New Row: No További beállítások:
20
o Items + -> Date Picker Name: "P3_V" Region: "Kritériumok" Label: "Dátum (ig):" Start New Row: No További beállítások: ugyanaz, mint az előzőnél. o Buttons + Name: "P3_BTN" Region: "Kritériumok" Label: "Lekérdezés" Start New Row: No Action: "Submit Page" Termékek népszerűsége o Regions + -> HTML -> HTML Title: "Termékek népszerűsége" Region Display Selector: Yes o Regions + -> HTML -> HTML Title: "Kritériumok" Parent Region: "Termékek népszerűsége" o Regions + -> Report -> Classic Report Title: "Eredmény" Source: select termékek.gyártó as "Gyártó", termékek.típus as "Típus", termékek.megnevezés as "Megnevezés", termékek.ár as "Ár", x.countorders as "Rendelések száma", x.sumprice as "Rendelések összértéke" from termékek, (select gyártó, típus, sum(db) as countorders, sum(db*ár) as sumprice from rendelt_termékek group by gyártó,típus) x where x.gyártó=termékek.gyártó and x.típus=termékek.típus order by case when :P3_RENDEZ = 1 and :P3_IRANY=1 then termékek.gyártó end ASC, case when :P3_RENDEZ = 1 and :P3_IRANY=2 then termékek.gyártó end DESC, case when :P3_RENDEZ = 2 and :P3_IRANY=1 then termékek.típus end ASC, case when :P3_RENDEZ = 2 and :P3_IRANY=2 then termékek.típus end DESC, case when :P3_RENDEZ = 3 and :P3_IRANY=1 then termékek.ár end ASC, case when :P3_RENDEZ = 3 and :P3_IRANY=2 then termékek.ár end DESC, case when :P3_RENDEZ = 4 and :P3_IRANY=1 then x.countorders end ASC, case when :P3_RENDEZ = 4 and :P3_IRANY=2 then x.countorders end DESC, case when :P3_RENDEZ = 5 and :P3_IRANY=1 then x.sumprice end ASC, case when :P3_RENDEZ = 5 and :P3_IRANY=2 then x.sumprice end DESC
Parent Region: "Termékek népszerűsége" o Items + -> Select List Name: "P3_RENDEZ" Region: "Kritériumok"
21
Label: "Rendezés:" Null Display Value: "Gyártó", Null Return Value: "1" List of values definition: STATIC2: Típus; 2, Ár; 3, Rendelések száma; 4, Rendelések összértéke; 5
o Items + -> Select List Name: "P3_IRANY" Region: "Kritériumok" Label: " Irány:" Start New Row: No Null Display Value: "Növekvő", Null Return Value: "1" List of values definition: STATIC2: Csökkenő; 2
o Buttons + Name: "P3_BTN2" Region: "Kritériumok" Label: "Lekérdezés" Start New Row: No Action: "Submit Page" Felhasználók aktivitása régió o Regions + -> HTML -> HTML Title: "Felhasználók aktivitása" Region Display Selector: Yes o Regions + -> HTML -> HTML Title: "Kritériumok" Parent Region: "Felhasználók aktivitása" o Regions + -> Report -> Classic Report Title: "Eredmény" Source: select felhasználók.email as "E-mail cím", felhasználók.név as "Név", felhasználók.cím as "Cím", felhasználók.regisztráció_dátuma as "Regisztráció dátuma", felhasználók.pontok as "Pontok", nvl(x.sumar,0) as "Rendelések összege" from felhasználók, (select email,sum(ár) as sumar from rendelt_termékek group by email) x where felhasználók.email=x.email(+) and (nvl(x.sumar,0)>=:P3_MIN or :P3_MIN is null) order by "Rendelések összege" desc
Parent Region: "Felhasználók aktivitása" o Items + -> Number Field Name: "P3_MIN" Region: "Kritériumok" Label: " Rendelések összértéke nagyobb mint:" 22
o Buttons + Name: "P3_BTN3" Region: "Kritériumok" Label: "Lekérdezés" Start New Row: No Action: "Submit Page" Megjelenő régiók kiválasztása régió (Region Display Selector) o Regions + -> Region Display Selector o Minden beállítást hagyhatunk alapértéken.
Adatok szerkesztése lap létrehozása Az alkalmazásunk főmoduljából hozzunk létre egy új oldalt (create page) a következő beállításokkal: Blank Page Name: "Adatok szerkesztése" Tab Options: "Use an existing tab set and create a new tab within the existing tab set." New Tab Label: "Adatok szerkesztése" Az új oldalunkon állítsuk be a sablont "Application default"-ra, hogy a kinézetünk ugyanolyan legyen, mint az előző oldalakon volt. Ezen a lapon több tábla tartalmát is tudjuk majd módosítani, a módosítást szemléltetés céljából táblánként máshogy oldottam meg. Régiók létrehozása: Felhasználók o Regions + -> Form -> Tabular Form o Table / View Name: "felhasználók" o Selected Columns: az összes oszlop legyen kiválasztva o Primary Key Type: Managed by Database (ROWID) o Updateable Columns: az összes oszlop legyen kiválasztva o Page:4, Region Title: "Felhasználók" o Labels: értelemszerűen magyar címkék megadása (pl.:Cancel=Mégse) o Submit, Cancel button Branch: 4 Termékek o Regions + -> Form -> Form on a Table with Report o Page Number: 20 o Region Title: "Termékek" o Table / View Name: "termékek" o Tab Options: "Do not use tabs" o Szerkesztési kép megadása:
23
o Page Number: 21 o Primary Key Type: Managed by Database (ROWID) o Végül a nem magyarosított szövegeket fordítsuk még le az összes oldalon.
Statisztikák lap létrehozása Az Apex-en belül rengeteg hasznos funkció található, ilyenek például a grafikonok. Pár kattintással és egy kis SQL tudással gyorsan összerakhatunk látványos és hasznos grafikonokat. Ezen az oldalon fogunk létrehozni négy egyszerű grafikont az alábbi módon: Az előzőekhez hasonlóan hozzunk létre egy új oldalt "Statisztikák" névvel. Gyártók népszerűsége régió: o Regions + -> Chart -> Column -> 3D Column o Title: "Gyártók népszerűsége" o Chart Title: "Gyártók népszerűsége" o Y Axis Title: "Bevétel" o X Axis Title: "Gyártó" o Source:
o Region Display Selector: Yes o Width: 600, Height:400 Felhasználók pontjai régió: o Regions + -> Chart -> Horizontal Bar -> 3D Bar Chart o Title: "Felhasználók pontjai" o Chart Title: "Felhasználók pontjai" o Y Axis Title: "Pontok" o X Axis Title: "E-mail" o Source:
o Region Display Selector: Yes o Width: 600, Height:400 o Start New Row: No Szállítási módok eloszlása régió: o Regions + -> Chart -> Pie & Doughnut-> 3D Pie o Title: "Szállítási módok eloszlása" o Chart Title: "Szállítási módok eloszlása" o Source:
o Region Display Selector: Yes
24
o Width: 600, Height:400 Rendelések összértéke régió: o Regions + -> Chart -> Column -> 3D Stacked Column o Title: "Rendelések összértéke " o Chart Title: "Rendelések összértéke" o Y Axis Title: "Összérték" o X Axis Title: "E-mail" o Source:
o Region Display Selector: Yes o Width: 600, Height:400 o Start New Row: No Megjelenő régiók kiválasztása régió (Region Display Selector) o Regions + -> Region Display Selector o Minden beállítást hagyhatunk alapértéken.
Vásárlói szokások lap létrehozása Ezen a lapon a nyelv dinamikus könyvtárán meghívott dll fogja elemezni a vásárlói szokásokat. Az alkalmazásunk főmoduljából hozzunk létre egy új oldalt (create page) a következő beállításokkal: Blank Page Name: "Adatok szerkesztése" Tab Options: "Use an existing tab set and create a new tab within the existing tab set." New Tab Label: "Adatok szerkesztése" Az új oldalunkon állítsuk be a sablont "Application default"-ra, hogy a kinézetünk ugyanolyan legyen, mint az előző oldalakon volt. Ezen a lapon több tábla tartalmát is tudjuk majd módosítani, a módosítást szemléltetés céljából táblánként máshogy oldottam meg. Régiók létrehozása: Elemzés régió o Regions + -> HTML -> HTML Title: "Elemzés" o Items + -> Display Only Name: "P6_U" Region: "Elemzés (10)" Pre Element Text: "" Post Element Text: "
" Source:
25
o Items + -> Display Only Name: "P6_DATE" Region: "Elemzés (10)" Label: "Dátum:" Source Used: "Always.." Source Type: "SQL Query (return single value)" Source: "SELECT sysdate FROM dual" o Items + -> Display Only Name: "P6_EREDMENY" Region: "Elemzés (10)" Label: "Elemzés eredménye:" Source Used: "Always.." Source Type: "SQL Query (return single value)" o Source: " Items + -> Display Only Name: "P6_U" Region: "Elemzés (10)" Label: "Dátum:" Source Used: "Always.." Source Type: "SQL Query (return single value)" Source: "SELECT elemez(:P6_REJTETT) FROM dual" o Source: " Items + -> Hidden Name: "P6_REJTETT" Region: "Elemzés (10)" Source Used: "Always.." Source Type: "SQL Query (return colon separated value)" Source: "select ár from rendelt_termékek order by idő"
26
Ezek után létrehozzuk a dll fájlt Visual Studio 2012-ben a NuGet csomag segítségével. A fájl tartalma:
Ezek után beállítjuk a platformot és a keretrendszert, majd Build-eljük a projektünket. A létrejött .dll és .exp fájlt az apex BIN könyvtárába helyezzük, ami esetünkben a következő: C:\app\Hallgato\product\11.2.0\dbhome_1\BIN'. Végül az SQL szkripteknél létrehozzuk a következő szkriptet (elemez.sql):
27
Jogosultságok és hozzáférések beállítás Az elkészült alkalmazásunkban létrejöttek olyan lapok is, melyekhez nem mindenkinek szabad hozzáférnie. Egy átlagos felhasználó például ne tudjon táblákat törölni, felhasználókat hozzáadni, vagy termékeket törölni. Ezért szükségünk van felhasználók és felhasználói csoportok létrehozására és beállítására.
Csoportok létrehozása Az APEX főmenüjéből indulva a következő lépésekkel tudjuk létrehozni a számunkra szükséges csoportokat: Administration -> Manage Users and Groups -> Groups -> Create User Group 1. Group Name: "ElectroShop_admins" 2. Group Name: "ElectroShop_users"
Felhasználók létrehozása A "Manage Users and Groups" menüből a "Users" fülön tudunk új felhasználókat hozzáadni: Username:
admin1
user1
user2
E-mail Address:
[email protected]
[email protected]
[email protected]
Password:
Tigris-1
Tigris-1
Tigris-1
Require Change of Password on First Use
No
No
No
User Groups:
ElectroShop_admins
ElectroShop_users
ElectroShop_users
Alkalmazás hozzáférések beállítása Szeretnénk elérni, hogy az "SQL lekérdezések", és az "Adatok szerkesztése" oldalhoz csak az "ElectroShop_admins" csoport tagjai férjenek hozzá. Ehhez először létre kell hoznunk egy hozzáférési sémát (Authorization Scheme) az alkalmazásunk főoldalából indulva: Shared Components -> Authorization Schemes -> Create Create Authorization Scheme: "From Scratch" Name: "Lap hozzáférés"
28
További beállítások:
A séma elkészült, ezután egyszerűen hozzá kell rendelnünk az oldalakat, amiket le szeretnénk védeni: Az "SQL lekérdezések" oldal beállításainál az "Authorization Scheme" legyen az álltaluk létrehozott "Lap hozzáférés". Az Adatok szerkesztése oldal beállításainál az "Authorization Scheme" legyen az álltaluk létrehozott "Lap hozzáférés".
Alkalmazás telepítése Adattáblák létrehozása SQL Workshop -> SQL Scripts -> Upload o Kiválasztjuk az Adattáblák_feltöltése.sql fájlt o Script Name: Adattáblák feltöltése Lefuttatjuk a szkriptet.
Trigger létrehozása SQL Workshop -> SQL Scripts -> Upload o Kiválasztjuk a Triggerek.sql fájlt o Script Name: Triggerek Lefuttatjuk a szkriptet.
Vásárlói szokásokhoz tartozó könyvtár importálása SQL Workshop -> SQL Scripts -> Upload o Kiválasztjuk a elemez.sql fájlt o Script Name: Elemez
29
Lefuttatjuk a szkriptet.
Adattáblák feltöltése Az adattáblákat két fajta fájlba is exportáltam, az adatok feltöltési módja a következő: XML típusú feltöltés esetén: SQL WorkShop -> Utilities -> Data Workshop -> Data Load -> XML data o Kiválasztjuk, hogy melyik táblába szeretnénk az adatokat feltölteni, majd a tábla nevével egyező .xml fájlt. o Load Data. TXT típusú pontosvesszővel tagolt feltöltés esetén: SQL WorkShop -> Utilities -> Data Workshop -> Data Load -> Text data o Load To: Existing table o Load From: Upload File (comma separated or tab delimited) o Kiválasztjuk, hogy melyik táblába szeretnénk az adatokat feltölteni, majd a tábla nevével egyező .txt fájlt. o Separator: ";" o First row contains column names: ne legyen bepipálva. o Kiválasztjuk az oszlopneveket, majd "Load Data". A táblákat az alábbi sorrendben célszerű feltölteni:
Felhasználók tábla Termékek tábla Rendelések tábla Rendelt_termékek tábla
Felhasználók létrehozása A felhasználókat a következő módok valamelyikével hozhatjuk létre: Az Apex alkalmazás létrehozásán belül "Felhasználók létrehozása" címszó alatt megtaláljuk a szükséges információkat. Importáljuk az exportált Workspace-t, amit a Work1.sql fájl tartalmaz.
Alkalmazás importálása Application builder -> Import o Kiválasztjuk az ElectroShop.sql fájlt o Telepítjük az alkalmazást.
30
Elkészült alkalmazás áttekintése Bejelentekezési oldal
Táblák oldal
31
SQL utasítások oldal
32
Lekérdezések oldal
Adatok szerkesztése oldal
33
Statisztikák oldal
34
Vásárlói szokások oldal
35
Irodalomjegyzék Kende Mária - Nagy István: Oracle példatár http://plsql-tutorial.com http://analog.nik.uni-obuda.hu http://orakulum.com http://docs.oracle.com http://www.dba-oracle.com
Mellékletek Exportált alkalmazás szkriptje: ElectroShop.sql Workspace export: Work1.sql Triggerek létrehozása: Triggerek.sql Adattáblák létrehozása szkript: Adattáblák_feltöltése.sql Vásárlási szokások: elemez.dll és elemez.exp Vásárlósi szokások könyvtár létrehozás: elemez.sql Adattáblák tartalma xml Adattáblák tartalma pontosvesszővel tagolt txt
36