Professional Documents
Culture Documents
AB 3 Folia
AB 3 Folia
• ALTER PROCEDURE
• ALTER TABLE
• ANALYZE (a teljesítmény statisztikáját gyűjti)
• ALTER TABLE ADD CONSTRAINT
• CREATE TABLE
• CREATE INDEX
• DROP INDEX
• DROP TABLE
• GRANT
• TRUNCATE
• REVOKE
1
DML (Data Manipulation Language)
• INSERT
• DELETE
• UPDATE
• SELECT
• COMMIT WORK
• ROLLBACK
2
Táblák létrehozása
A táblákat a CREATE TABLE paranccsal lehet
létrehozni. Egy táblában <=1000 oszlop lehet. Több adattípust
is lehet alkalmazni, de gyakorlatilag csak néhányra van
szükség.
• NUMBER(h, t) – numerikus adatok, hossza<=38, h a szám
hosszát tartalmazza, t – a tizedes-jegyek számát;
• DATE – dátum és idő típus;
• VARCHAR2(méret) – karakter típus, a hossza váltózó
(max hossza<=4000);
• CHAR(méret) – karakter típus, fix hosszúságú (max
hossza<=2000);
• NCHAR(méret) – azonos a CHAR típussal, de a max
méret függ a karakterkészletétől,
3
• LOB (large objects) – bináris v. szöveges formátum. Lehet
kép-, hang-, vagy nagy méretű szöveges állomány.
A LOB típuson belül lehetnek:
• LONG – szöveges adatok, max hossza<=2 Gbyte;
• LONG RAW – bináris adatok, max hossza<=2 Gbyte;
A LONG és LONG RAW típusokat csak egyszerű
adatfeldolgozásban alkalmazzák.
• CLOB, NCLOB, BLOB – belső LOB típusok, mivel
az AB-ban tárolódnak, max hossza<=4 Gbyte;
• CLOB – az adatokat tárolja az AB karakter-készlete
alapján;
• NCLOB – az adatokat tárolja a nemzeti karakter-
készletben.
4
Az Oracle mindegyik táblába automatikusan helyez egy
ROWID nevű pszeudooszlopot, amely a programozók ritkán
szokták használni.
ROWID – pszeudooszlop, amely tartalmazza a sor logikai
egyedi címét. A ROWID nem változható meg, de a SELECT
parancsban lekérdezhető:
5
Csak az a felhasználó hozhat létre táblákat, aki CREATE
TABLE vagy CREATE ANY TABLE privilégiummal
rendelkezik.
6
CREATE TABLE testtab
(col1 VARCHAR2(10))
STORAGE (INITIAL 100K
NEXT 50K
MINEXTENTS 1
MAXEXTENTS 99
PCINCREASE 20);
7
Táblák partíciónálása
9
Hivatkozás egy partícióra:
ALTER TABLE nagy_tabla DROP PARTITION p1;
Példa.
CREATE TABLE students(
id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
major VARCHAR2(30), -- szak
current_credits NUMBER(3) ); -- leadott
vizsgák száma
11
Az ORACLE-rendszer tartalmazz egy bemutató sémát,
amelynek Scott a tulajdonosa:
13
CONSTRAINT integritási megszorítás alkalmazása
A táblamegszorítások listája:
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• REFERENCES
• ON DELETE CASCADE
15
• CHECK
• ENABLE VALIDATE
• DISABLE
Az oszlopmegszorítások:
• NULL
• NOT NULL
•…
A többi oszlopmegszorítások a táblamegszorításokkal
azonosak.
16
A DISABLE opciót a integritási megszorítás vagy trigger
kikapcsolására (nem törlésére) alkalmazhatjuk.
Leggyakrabban az ALTER TABLE parancsban alkalmazzák.
17
Beépített függvények
Típusok konvertálása
• TO_CHAR(<number>) vagy
TO_CHAR(<number>, <format>)
• TO_CHAR(<date>) vagy
TO_CHAR(<date>, <format>)
• TO_DATE(<string>) vagy
TO_DATE(<string>, <format>)
• TO_NUMBER(<string>)
18
Naptári függvények
• ADD_MONTHS(<date>, n), a dátumhoz hozzáad n
hónapot
• ROUND(<date>)
ROUND(<date>, <format>)
Numerikus függvények
• ABS(n)
• COS(n)
• COSH(n)
• SIN(n)
• SINH(n)
• TAN(n)
• TANH(n)
19
• LN(n)
• LOG(<base>, n) <base> - a logaritmus alapja
• MOD(m, n) - m/n az osztás maradéka (mod(7,5): 2)
• POWER(x,y) hatványozás (power(3,2): 9)
• ROUND(n [,decimal_degits])
• SIGN(n) (értékek: -1, ha n<0; 0, ha n=0; 1, ha n>0;)
• CEIL(n) (ceil(10.7) : 11)
• FLOOR(n) (floor(10.7): 10)
• SQRT(n) (sqtr(25) : 5)
Karakteres függvények
• ASCII(charakter)
• CHR(n)
20
• INITCAP(string) (Initcap(’szabó józsef’): Szabó
József)
• INSTR(input_string, sub_string [,n, [,m]])
Az n-ik karaktertől kezdve keresi az m-ik sub_string
előfordulását az input_string-ben. Ha talált, visszaadja annak
a helyét, ha nem talált, akkor az eredmény 0 lesz.
• LENGTH (string) (Length(’Oracle’): 6)
• LOWER (string) (Lower(’ABC’): abc)
• UPPER (string)
• LPAD (string, n)
• LPAD (string, n[,pad_chars])
• RPAD (string, n)
• RPAD (string, n[,pad_chars])
• LTRIM (string)
21
• LTRIM (string [,set_of_chars])
• RTRIM (string)
• RTRIM (string [,set_of_chars])
• SUBSTR (string, start [,length])
(Substr(’abcdef’, 3, 2): cd)
• TRANSLATE (string, search_set, replace_set)
A string-ben a search_set karaktereket becseréli a
megfelelő replace_set karakterekre.
TRANSLATE (’eger’, ’e’ , ’a’)=’agar’
22
Univerzális függvények
• NVL(kifejezés, replace_value) - ha a kifejezés nem üres,
akkor annak az értékét adja vissza. Ha a kifejezés NULL
értékű, akkor a replace_value értéket adja vissza.
23
Példa.
SELECT DECODE(job, ’clerk’, ’Ügyintéző’, ’president’
’Elnök’, job) FROM emp;
JOB
-----
Elnök
ANALIST
Ügyintéző
Ügyintéző
ANALIST
24
NULL értékek
A parancsokban a NULL értékeket csak az IS NULL vagy IS
NOT NULL operátorokkal lehet alkalmazni:
25
Példa.
SELECT e_name, sal+comm FROM emp;
26
Halmaz műveletek
• UNION (egyesítés) – két lekérdezés eredményeinek unióját
képezi. Az eredmény-táblába olyan sorok kerülnek,
melyeket legalább az egyik tábla tartalmaz, de ismétlődő
sorokat nem tartalmaz az eredmény-tábla;
• INTERSECT (metszet) – két lekérdezés eredményeinek
metszetét képezi. Olyan sorokat kapunk, melyek mindkét
táblában előfordulnak;
• MINUS (kivonás) – két lekérdezés eredményeinek
különbségét képezi. Azokat a sorokat kapjuk, melyeket az
első tábla tartalmazza, a másik – pedig nem.
27
SELECT d_name FROM dept WHERE d_name LIKE
’%s%’
UNION
SELECT d_name FROM dept WHERE d_name LIKE
’%o%’;
28
SELECT d_name FROM dept WHERE d_name LIKE
’%s%’
MINUS
SELECT d_name FROM dept WHERE d_name LIKE
’%o%’;
29
Táblák módosítása DML
30
Sorok beszúrása a táblába (INSERT parancs)
31
Példa.
32
Arra is van lehetőség, hogy a táblába az INSERT parancs
egyszerre több sort szúrjon be (e célból alkalmazzuk a
beágyazott SELECT parancsot)
INSERT INTO testtab (col1, col2)
SELECT e_name, emp_no FROM emp;
33
Tábla létrehozása egy másik tábla alapján
34
Adatok módosítása (UPDATE parancs)
Példa.
UPDATE emp_copy2 SET e_name=’Kovács’
WHERE emp_no=7499;
35
Sorok törlése (DELETE parancs)
Példa.
UPDATE emp_copy SET e_name=UPPER(
SUBSTR(e_name, 1, 1)) || LOWER(SUBSTR(e_name,
2, LENGTH(e_name)-1));
36
Ugyan ezt az eredményt kapjuk, ha az INITCAP függvényt
alkalmazzuk.
37
Tranzakciók
38
Kétfázisú véglegesítés – az Oracle az elosztott tranzakciók
kezelését a kétfázisú véglegesítéssel végzi. Ez biztosítja, hogy
egy tranzakció a hálózat minden csomópontjában vagy
véglegesítődik, vagy visszagörgetésre kerül.
39
Példa.
SAVEPOINT MyPoint;
Savepoint created.
EMP_NO E_NAME
-------------- -------------
7369 smith
7499 allen
7566 jones
7788 scott
7654 martin
5 rows selected.
40
DELETE FROM emp WHERE e_name LIKE ’%a%’;
2 rows deleted.
EMP_NO E_NAME
-------------- -------------
7369 smith
7566 jones
7788 scott
3 rows selected.
41
SELECT emp_no, e_name FROM emp;
EMP_NO E_NAME
-------------- -------------
7369 smith
7499 allen
7566 jones
7788 scott
7654 martin
5 rows selected.
42
Privilégiumok
43
engedélyezett műveteket végrehajtatja a felsorolt AB-
objektumaival.
Egy AB-hoz általános esetben több felhasználó is
kapcsolódhat. Az Oracle-ban minden objektumnak van
felhasználó-tulajdonosa. A nem tulajdonos-felhasználó csak
akkor végezhet bizonyos műveleteket az objektumokkal, ha
megkapta a megfelelő privilégiumokat. Létezik több mint
nyolcvan rendszer-privilégium:
• ALTER
• DELETE
• EXECUTE
• INDEX
• INSERT
• REFERENCES
44
• SELECT
• UPDATE
•…
A következő táblázat tartalmazza egyes privilégiumok és AB-
objektumok közti lehetséges kapcsolatokat.
Privilégium Table View Sequence Procedure
ALTER + +
DELETE + +
EXECUTE +
INDEX +
INSERT + +
REFERENCES +
SELECT + + +
UPDATE + +
45
A INSERT, UPDATE és REFERENCES privilégiumokat
lehet a tábla egyes oszlopaihoz kötni. Ha meg akarjuk tudni,
hogy milyen rendszer privilégiumokat lehet alkalmazni, végre
kell hajtani a következő parancsot:
SELECT UNIQUE privilege FROM dba_sys_priv;
46
Privilégiumok adományozása
Az AB adminisztrátor a privilégiumokat a GRANT
paranccsal adhatja meg a felhasználóknak:
GRANT privilégium_lista ON objektum_lista TO
felhasználó_lista
[WITH GRANT OPTION];
47
A WITH GRANT OPTION esetén a felhasználó az adott
privilégiumot más felhasználónak is tovább adhatja.
Példa.
GRANT SELECT, UPDATE ON emp_copy TO
test_user;
A test_user felhasználó az emp_copy táblával végrehajthatja a
SELECT és UPDATE parancsokat. Ezekben a parancsokban
nem elég a tábla nevét emp_copy megadni, mivel a tábla
tulajdonosát is meg kell adni. Például, ha a scott felhasználó
az emp_copy tábla tulajdonosa, akkor a helyes hivatkozás:
SELECT * FROM scott.emp_copy;
48
Bizonyos esetekben ez a követelmény problémát is okozhat.
Például, ha a tábla tulajdonosa a program létrehozása és
futtatási ideje között megváltozott, akkor ezt figyelembe kell
venni az összes táblára való hivatkozásban. Ilyen esetekben
célszerű alkalmazni a tábla szinonimáját:
CREATE SYNONIM test FOR scott.emp_copy;
A scott.emp_copy tábla megkapta a test szinonimát. Ha ezek
után megváltozik a tábla tulajdonosa, akkor továbbra is a
táblára lehet hivatkozni a szinonima segítségével
SELECT * FROM test;
49
A PUBLIC opció esetén az adott privilégiumokat az összes
felhasználóra érvényes, ami azt jelenti, hogy az objektum
nyilvános. A Nyilvános objektum elérhető, látható az összes
felhasználó számára.
Szerepkörök (ROLE)
51
Például, létrehozunk egy szerepkört
CREATE ROLE kozos;
utána a szerepkörhöz privilégiumokat kapcsolunk
GRANT INSERT ON table_a TO kozos;
GRANT INSERT ON table_b TO kozos;
GRANT INSERT, DELETE ON table_c TO kozos;
GRANT UPDATE ON table_d TO kozos;
GRANT DELETE ON table_e TO kozos;
GRANT SELECT ON table_f TO kozos;
Ha a felh_1 és felh_2 felhasználók megkapják a kozos
szerepkört
GRANT kozos TO felh_1;
GRANT kozos TO felh_2;
akkor rendelkezni fognak az összes kozos szerepkörhöz tartozó
jogosultságokkal.
52
Beépített szerepkörök
Az Oracle-ban léteznek beépített szerepkörök is:
• CONNECT-
• ALTER SESSION
• CREATE CLUSTER
• CREATE DATABASE LINK
• CREATE SEQUENCE
• CREATE SESSION
• CREATE SYNONIM
• CREATE TABLE
• CREATE VIEW
53
• CREATE CLUSTER
• CREATE PROCEDURE
• CREATE SEQUENCE
• CREATE TABLE
54
Példa.
GRANT EXECUTE ON my_package TO PUBLIC;
GRANT EXECUTE ON my_func TO felh_2;
GRANT EXECUTE ON my_proc TO felh_1;
Privilégiumok visszavonása
Az AB adminisztrátor a privilégiumot a felhasználótól a
REVOKE parancs által visszavonhat:
55
integritási megszorítást, amelyet a felhasználó hozott létre
(CASCADE – lépcsőzetes).
56
Indexek
57
A SELECT parancs a WHERE része alapján határozza
meg a szükséges és felhasználandó indexeket, és ez biztosítja a
parancs leggyorsabb végrehajtását.
Az indexeket létre lehet hozni:
• direkt módon, a CREATE INDEX paranccsal,
• automatikusan, a CREATE TABLE parancsban,
• ALTER TABLE paranccsal.
Használhatók:
• egyedi (nem ismétlődő) indexek, az értékei különbözőek,
amikor a CREATE TABLE parancs a PRIMARY KEY
vagy UNIQUE megszorításokat tartalmazza;
• ismétlődő értékeket tartalmazó indexek.
58
Példa.
CREATE INDEX Test_ind ON Test(col1)
TABLESPACE users
STORAGE (INITIAL 20K
NEXT 20K
PCTINCREASE 75);
Példa.
CREATE TABLE sample_3
(col_a VARCHAR(30),
col_b VARCHAR(30),
col_c VARCHAR(30));
CREATE INDEX col_c_ind ON sample_3(col_c) ;
CREATE UNIQUE INDEX col_a_ind ON
sample_3(col_a) ;
59
A táblák indexeit a user_indexes nézetből lehet lekérdezni.
Példa.
SELECT index_name FROM user_indexes
WHERE table_name=’SAMLE_3’;
INDEX_NAME
-------------------
COL_A_IND
COL_B_IND
60
ALTER TABLE sample_3 DISABLE CONSTRAINT
COL_A_IND;
INDEX_NAME
-------------------
COL_B_IND
66
Az index törlését hasonló képen lehet végrehajtani:
ALTER TABLE test DROP PRIMARY KEY;
67
Szekvenciák (sorozatok)
Példa.
Ha a student tábla id mezője elsődleges kulcs, akkor annak
az értékeit a student_sequence szekvencia által kapjuk meg:
69
INSERT INTO students (id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Margaret',
'Mason', 'History', 0);
SELECT id FROM students;
ID
-------
10001
10002
71
A szekvencia módosítása:
ALTER SEQUENCE test_seq
INCREMENT BY 10
MAXVALUE 1000
MINVALUE 50
NOCYCLE
CACHE 20;
és törlése:
DROP SEQUENCE test_seq;
72
Klaszterek (Fürtök)
73
Példa.
CREATE CLASTER Diak_Tanar (tantargy
NUMBER(3))
TABLESPACE users
STORAGE( INITIAL 200K
NEXT 300K
MINEXTENTS 2
MAXEXTENTS 20);
74
CREATE TABLE Diak(tantargy NUMBER(3)
PRIMARY KEY, …)
CLUSTER Diak_Tanar (tantargy);
75
A klaszter indexét még akkor kell létrehozni, amikor a táblák
üresek, egyetlen sort sem tartalmazhat.
76
A klasztert és az indexét különböző táblaterületben lehet
tárolni. Ha töröljük a klaszter indexét, akkor a klaszter tábláit
már nem lehet használni.
A klaszter módosítása az ALTER CLUSTER paranccsal
történik:
ALTER CLUSTER Diak_Tanar
PRTFREE 30;
77
Nézetek (VIEW)
79
Az egyszerű nézet INSERT, DELETE, UPDATE
parancsokkal módosítható.
A módosítások azokban a táblákban rögzítődnek, amelyek
alapján a nézetet szerkesztették.
A nézeteket kényelmes alkalmazni az összetett lekérdezések
helyet:
CREATE OR REPLACE VIEW emp_dept_view AS
SELECT e.emp_no, e.e_name, d.dept_no, d.d_name
FROM emp e, dept d
WHERE e.dept_no=d.dept_no;
és
SELECT * FROM emp_dept_view;
Előfordulhat, hogy a módosítások után a táblában olyan
változások történnek, hogy a tábla egyes sorai már nem
kerülnek be a következő VIEW-lekérdezésbe, mivel nem
80
felelnek meg a WHERE-feltételnek. Ilyen módosításokat
meg lehet akadályozni, ha a nézet létrehozásának parancsa a
WITH CHECK OPTION megszorítást tartalmazza.
81
tartalmazza, a felhasználó, pedig megkapja a megfelelő
privilégiumokat erre a nézetre.
82
Szinonimák
CONNECT test/test
CREATE SYNONIM emp FOR scott.emp
84