You are on page 1of 104

SQL v PL/SQL

C bn

Oracle c bn - SQL v PL/SQL

MC LC
MC LC ...

...1

CHNG 1. GII THIU CHUNG ...

...5

1.1. NGN NG SQL ...


1.1.1. Lch s pht trin ca ngn ng SQL ...
1.1.2. Chun SQL ...
1.2. CC KHI NIM C BN TRONG C S D LIU ...
1.2.1. Cc thnh phn logic trong database...
1.2.2. Cc i tng trong database ...
1.2.3. Cc nhm lnh SQL c bn ...
1.3. C S D LIU THC HNH...
1.3.1. M hnh d liu ...
1.3.2. Cu trc bng d liu ...

..5
.5
..5
...5
..5
...6
.6
..7
..7
.7

CHNG 2. LNH TRUY VN C BN ...

.9

2.1. CU LNH TRUY VN ...


2.1.1. Quy tc vit lnh ...
2.1.2. Cu lnh truy vn c bn ...
2.1.3. Cc thnh phn khc ca mnh SELECT ...
2.1.4. Phn bit gi tr d liu tr v ...
2.1.5. Gi tr NULL ...
2.2. SQL*PLUS, CNG C TNG TC LNH SQL VI DATABASE ...
2.2.1. Cu lnh tng tc ca SQL*Plus ...
2.2.2. Phn nhm cu lnh trong SQL*Plus...
2.2.3. Chi tit cc lnh SQL*Plus c bn ...
2.3. BI TP ...

..9
...9
..9
..9
..10
..11
...11
.11
...12
.13
..15

CHNG 3. TRUY VN D LIU C IU KIN ...

..17

3.1. CC GII HN TRONG TRUY VN D LIU ...


3.1.1. Mnh WHERE...
3.1.2. Cc ton t s dng trong mnh WHERE ...
3.1.3. V d s dng cc ton t iu kin ...
3.2. SP XP D LIU TR V...
3.2.1. Mnh ORDER BY ...
3.2.2. Sp xp nhiu ct d liu tr v...
3.3. BI TP ...

...17
...17
..18
.19
..20
...20
..20
..21

CHNG 4. CC HM SQL ...


4.1. TNG QUAN V HM SQL...
4.1.1. Cu trc hm SQL ...
4.1.2. Phn loi hm SQL ...
4.2. HM SQL THAO TC TRN TNG DNG D LIU...
4.2.1. Cc hm thao tc trn kiu d liu s...
4.2.2. Cc hm thao tc trn kiu d liu k t...
4.2.3. Cc hm thao tc trn kiu d liu thi gian...
4.2.4. Cc hm chuyn i kiu ...
4.3. HM THAO TC TRN TP HP ...
4.3.1. Cc hm tc ng trn nhm ...
4.3.2. Mnh GROUP BY ...
4.4. MT S HM MI B SUNG TRONG Oracle9i ...
4.4.1. Hm NULLIF ...
4.4.2. Hm COALSCE ...
4.4.3. Cu lnh case ...

...23
..23
.23
...23
.24
..24
.26
.30
...32
...34
...34
...35
..36
.36
..36
..36
Trang 1

Oracle c bn - SQL v PL/SQL


4.5. BI TP ...
4.5.1. Hm trn tng dng d liu ...
4.5.2. Hm trn nhm d liu ...

CHNG 5. LNH TRUY VN D LIU M RNG...


5.1. KT HP D LIU T NHIU BNG ...
5.1.1. Mi lin kt tng ng ...
5.1.2. Mi lin kt khng tng ng ...
5.1.3. Mi lin kt cng ...
5.1.4. Lin kt ca bng vi chnh n (t thn)...
5.1.5. Cch biu din kt ni mi trong Oracle 9i ...
5.1.6. Cc ton t tp hp ...
5.2. LNH TRUY VN LNG ...
5.2.1. Cu lnh SELECT lng nhau. ..
5.2.2. Ton t SOME/ANY/ALL/NOT IN/EXITS ...
5.3. CU TRC HNH CY ...
5.3.1. Cu trc hnh cy trong 1 table ...
5.3.2. K thut thc hin ...
5.3.3. Mnh WHERE trong cu trc hnh cy...
5.4. BI TP ...

CHNG 6. BIN RUNTIME ...


6.1. D LIU THAY TH TRONG CU LNH ...
6.2. LNH DEFINE ...
6.3. LNH ACCEPT ...
6.4. BI TP ...

CHNG 7. TABLE V CC LNH SQL V TABLE...


7.1. LNH TO TABLE...
7.1.1. C php to bng ...
7.1.2. Tnh ton kch thc table (tham kho) ...
7.2. MT S QUY TC KHI TO TABLE ...
7.2.1. Quy tc t tn Object ...
7.2.2. Quy tc khi tham chiu n Object ...
7.3. Cc Kiu d liu c bn...
7.3.1. Kiu CHAR ...
7.3.2. Kiu VARCHAR2 ...
7.3.3. Kiu VARCHAR ...
7.3.4. Kiu NUMBER ...
7.3.5. Kiu FLOAT ...
7.3.6. Kiu LONG ...
7.3.7. Kiu DATE ...
7.3.8. Kiu RAW v kiu LONG RAW...
7.3.9. Kiu ROWID ...
7.3.10. Kiu MLSLABEL ...
7.3.11. Chuyn i kiu ...
7.4. RNG BUC D LIU TRONG TABLE ...
7.4.1. NULL/NOT NULL ...
7.4.2. UNIQUE ...
7.4.3. PRIMARY KEY ...
7.4.4. FOREIGN KEY ( Referential ) ...
7.4.5. CHECK ...
7.5. LNH DDL CAN THIP TI TABLE ...
7.5.1. Chnh sa cu trc table ...
7.5.2. Cc lnh DDL khc ...
7.5.3. Ch dn cho table ...
7.5.4. Thay i tn object...
7.5.5. Xa d liu ca table ...

..36
..36
...39

.40
...40
..40
.40
.40
.41
...41
..42
...43
...43
..43
.44
...44
..44
..45
..46

...50
.50
..50
...51
..51

...52
52
52
53
54
54
54
55
55
55
56
56
56
56
57
58
58
58
58
59
59
59
59
60
60
60
60
61
61
62
62

Trang 2

Oracle c bn - SQL v PL/SQL


7.6. THNG TIN V TABLE TRONG T IN D LIU...
7.7. BI TP ...

...62
..63

CHNG 8. CC LNH THAO TC D LIU...

..64

8.1. THAO TC D LIU TRONG TABLE ...


8.1.1. Thm mi dng d liu ...
8.1.2. Cp nht dng d liu ...
8.1.3. Lnh Merge...
8.1.4. Xa dng d liu...
8.1.5. Li rng buc d liu ...
8.2. LNH IU KHIN GIAO DCH...
8.3. BI TP ...

.64
...64
.65
...65
.66
...66
..66
..67

CHNG 9. SEQUENCE V INDEX...


9.1. SEQUENCE...
9.1.1. To Sequence...
9.1.2. Thay i v hu sequence ...
9.2. INDEX...
9.2.1. To index ...
9.2.2. S dng index...
9.3. BI TP ...

CHNG 10. VIEWS ...

...68
...68
..68
.69
...69
...69
..69
..70

...71

10.1. VIEWS ...


10.1.1. To view ...
10.1.2. Xa cc view ...
10.2. BI TP ...

...71
..71
..71
...72

CHNG 11. QUYN V BO MT ...

..73

11.1. QUYN - PRIVILEGE ...


11.2. ROLE...
11.3. SYNONYM...

.73
..74
...74

CHNG 12. GII THIU NGN NG PL/SQL...

..76

12.1. TNG QUAN V PL/SQL ...


12.1.1. C php lnh PL/SQL ...
12.1.2. Khi lnh PL/SQL ...
12.2. LNH LP TRNH PL/SQL N GIN ...
12.2.1. Lnh IF...
12.2.2. Lnh lp LOOP khng nh trc ...
12.2.3. Lnh lp LOOP c nh trc ...
12.2.4. Lnh lp WHILE ...
12.2.5. Lnh GOTO, nhy v iu kin ...
12.3. GII THIU CURSOR ...
12.4. CC KIU D LIU THNG DNG...
12.4.1. Kiu d liu Table ...
12.4.2. Kiu d liu Record ...
12.4.3. Sao kiu d liu mt dng ...
12.4.4. Sao kiu d liu ca mt ct ...
12.4.5. Lnh SELECT... INTO...
12.5. BI TP ...

...76
...76
...76
...77
..77
...78
...78
...78
.78
...79
..81
...81
...81
..82
..82
...82
...83

CHNG 13. GII THIU PROCEDURE BUILDER ...

..84

13.1. CC THNH PHN TRONG PROCEDURE BUILDER ...


13.1.1. Object Navigator ...
13.1.2. Program Unit Editor...
13.1.3. Store Program Unit Editor ...

...84
..84
.85
...85
Trang 3

Oracle c bn - SQL v PL/SQL


13.1.4. Database Trigger Edditor ...
13.2. CC HM, TH TC ...
13.2.1. To hm, th tc trn Client ...
13.2.2. To hm, th tc trn Server ...
13.2.3. D li i vi cc hm, th tc ...

CHNG 14. GII THIU CC TH TC, HM V PACKAGE ...


14.1. TH TC ...
14.1.1. To th tc ...
14.1.2. Hu b th tc ...
14.1.3. Cc bc lu gi mt th tc ...
14.2. HM ...
14.2.1. To hm...
14.2.2. Thc hin mt hm ...
14.2.3. Li ch ca vic s dng hm ...
14.2.4. Mt s hn ch khi s dng hm trong cu lnh SQL ...
14.2.5. Hu b hm...
14.2.6. Hm v th tc ...
14.3. PACKAGE...
14.3.1. Cu trc ca package ...
14.3.2. To package ...
14.3.3. Hu package ...
14.3.4. Li ch ca vic s dng package ...
14.3.5. Mt s package chun ca Oracle ...

CHNG 15. DATABASE TRIGGER ...


15.1. TO TRIGGER ...
15.1.1. Phn loi trigger ...
15.1.2. Lnh to trigger ...
15.1.3. S dng Procedure builder to trigger ...
15.2. QUN L TRIGGER ...
15.2.1. Phn bit database trigger ...
15.2.2. Thay i trng thi ca database trigger ...
15.2.3. Hu b trigger ...
15.2.4. Lu khi s dng trigger ...

PH LC ...
A - TI LIU THAM KHO ...
B - DANH MC CC HNH V...

.85
.86
...86
.86
..87

...88
..88
..88
...89
...89
...89
...90
.90
...91
..91
.91
..92
...92
...92
..93
..95
..95
..96

.97
..97
...97
.98
...99
...100
...100
...101
.101
..102

...103
.103
..103

Trang 4

Oracle c bn - SQL v PL/SQL

Chng 1. GII THIU CHUNG


1.1.NGN NG SQL
1.1.1. Lch s pht trin ca ngn ng SQL
M hnh c s d liu (CSDL) quan h - RDBMS, do E.F Codd a ra vo u thp k 70. T n nay,
n lin tc pht trin tr thnh m hnh CSDL ph bin bc nht. M hnh quan h gm cc thnh phn sau:
Tp hp cc i tng v / hoc cc mi quan h Tp hp cc
x l tc ng ti cc quan h
Rng buc d liu m bo tnh chnh xc v nht qun.
SQL (Structured Query Language, c l "sequel") l tp lnh truy xut CSDL quan h.
Ngn ng SQL c IBM s dng u tin trong h qun tr CSDL System R vo gia
nhng nm 70. H ngn ng SQL u tin (SEQUEL2) c IBM cng b vo thng 11
nm 1976. Nm 1979, tp on Oracle gii thiu thng phm u tin ca SQL. SQL cng
c ci t trong cc h qun tr CSDL nh DB2 ca IBM v SQL/DS.
Ngy nay, SQL c s dng rng ri v uc xem l ngn ng chun truy cp CSDL
quan h.

1.1.2. Chun SQL


Nm 1989, vin tiu chun quc gia Hoa K (ANSI) cng nhn SQL l ngn ng chun truy cp CSDL
quan h trong vn bn ANSI SQL89.
Nm 1989, t chc tiu chun quc t (ISO) cng nhn SQL ngn ng chun truy cp CSDL quan h
trong vn bn ISO 9075-1989.
Tt c cc h qun tr CSDL ln trn th gii cho php truy cp bng SQL v hu ht theo chun ANSI.

1.2.CC KHI NIM C BN TRONG C S D LIU


1.2.1. Cc thnh phn logic trong database
Thnh phn

Din gii

Table

Cu trc lu tr c bn nht trong CSDL quan h (RDBMS), n bao


gm 1 hoc nhiu columns (ct d liu) vi 0 hoc nhiu rows (dng d liu).

Row

T hp nhng gi tr ca Column trong bng. Mt row cn c gi


l 1 record (bn ghi).

Column

Quy nh mt loi d liu trong bng. V d: loi d liu tn phng


ban c trong bng phng ban. Ta th hin th column ny thng qua tn column
v c th km theo mt vi thng tin khc v column nh kiu d liu, di
ca d liu.

Field

Giao ca column v row. Field chnh l ni cha d liu. Nu khng


c d liu trong field ta ni field c gia tr l NULL.

Primary Key

L mt column hoc mt tp cc column xc nh tnh duy nht ca


cc rows trong bng. V d DEPTNO l Primary Key ca bng DEPT
v n c dng xc nh duy nht mt phng ban trong bng
DEPT m i din l mt row d liu.

Trang 5

Oracle c bn - SQL v PL/SQL

Primary Key nht thit phi c s liu.


Foreign Key

L mt column hoc mt tp cc columns c tham chiu ti chnh


bng hoc mt bng khc.
Foreign Key xc nh mi quan h gia cc bng.

Constraints

L cc rng buc i vi d liu trong cc bng thuc database. V


d: Foreign Key, Primary Key...

V d: minh ho cc thnh phn logic trong database


EMP

Row

DEPT

EMPNO

ENAME

7369

SMITH

20

7499

ALLEN

30

10

ACCOUNTING

7521

WARD

30

20

RESEARCH

7566

JONES

20

30

SALES

7654

MARTIN

30

7698

BLAKE

30

40

OPERATIONS

EMP

DEPT

DEPTNO

DEPTNO

DNAME

Foreign key
7782

CLARK

10

Primary key

Column
Hnh v 1. Minh ho cc thnh phn logic trong database

1.2.2. Cc i tng trong database


i tng

Din gii

Table

Cu trc lu tr c bn nht trong CSDL quan h (RDBMS), gm


row v column

View

L cu trc logic hin th d liu t 1 hoc nhiu bng

Sequence

Lt sinh gi tr cho cc primary key

Index

Tng tnh thc thi cho cu lnh truy vn

Synonym

Tn tng ng ca i tng

Program unit

Tp hp cc cu lnh thc hin c vit bi ngn ng SQL v


PL/SQL, bao gm Procedure, function, package...

1.2.3. Cc nhm lnh SQL c bn


Tn lnh

Din gii

SELECT

L lnh thng dng nht, dng ly, xem d liu trong CSDL.

INSERT
UPDATE
DELETE

L 3 lnh dng nhp thm nhng row mi, thay i ni dung


d liu trn cc row hay xo cc row trong table. Nhng lnh ny
c gi l cc lnh thao tc d liu DML (Data Manipulation
Language)

Trang 6

Oracle c bn - SQL v PL/SQL


CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMIT
ROLLBACK
SAVE POINT

L 3 lnh dng thit lp, thay i hay xo b cu trc d liu


nh l table, view, index. Nhng lnh ny c gi l cc lnh nh ngha d
liu DDL (Data Definition Language)
Qun l vic thay i d liu bng cc lnh DML. Vic thay i d liu c
th c nhm li thnh cc transaction.
2 lnh ny dng gn hoc hu cc quyn truy nhp vo CSDL Oracle v
cc cu trc bn trong n. Nhng lnh ny c gi l cc lnh iu khin d
liu DCL (Data Control Language)

GRANT
REVOKE

1.3.C S D LIU THC HNH


1.3.1. M hnh d liu

DEPT

EMP

SALGRADE

BONUS

DUMMY
Hnh v 2. M hnh d liu thc hnh

1.3.2. Cu trc bng d liu


Bng DEPT
Tn ct

Kiu

iu kin
PRIMARY KEY

Din gii
M phng ban

DEPTNO

NUMBER(2)

DNAME

VARCHAR2(14)

Tn phng ban

LOC

VARCHAR2(13)

a ch

Bng SALGRADE
Tn ct

Kiu

iu kin
PRIMARY KEY

Din gii

GRADE

NUMBER

LOSAL

NUMBER

Gi tr thp nht

HISAL

NUMBER

Gi tr cao nht

Mc lng

Trang 7

Oracle c bn - SQL v PL/SQL

Bng EMP
Tn ct

Kiu

iu kin

EMPNO

NUMBER(4)

PRIMARY KEY

ENAME

VARCHAR2(10)

JOB

VARCHAR2 (9)

MGR

NUMBER(4)

HIREDATE

DATE

Ngy gia nhp cng ty

SAL

NUMBER(7,2)

Lng

COMM

NUMBER(7,2)

DEPTNO

NUMBER(2) NOT
NULL,

Din gii
M nhn vin
Tn nhn vin
Ngh nghip

FOREIGN KEY
(EMP.EMPNO)

M ngi qun l

Thng
FOREIGN KEY
(DEPT.DEPTNO)

M phng ban

Trang 8

Oracle c bn - SQL v PL/SQL

Chng 2. LNH TRUY VN C BN


2.1.CU LNH TRUY VN
2.1.1. Quy tc vit lnh
Cc cu lnh truy vn c biu din theo cc quy tc sau:
Cc lnh trong cu lnh SQL thuc loi khng phn bit ch vit hoa hay thng. Ni dung
ca mt cu lnh SQL c th c tri di trn nhiu dng. Cc t kho khng c php vit
tt hay phn cch trn nhiu dng Cc mnh thng thng c t trn nhiu dng khc
nhau
r rng trong vic th hin cu lnh, ta nn s dng cc du TAB khi vit lnh Ta c th
s dng cc k t c bit nh: +, -, \, *,... biu din gi tr trong cu
lnh.
Lnh kt thc bi du chm phy (;).

2.1.2. Cu lnh truy vn c bn


C php:
SELECT
FROM

[DISTINCT ]
table;

{*, column [alias],...}

Vi:
SELECT
DISTINCT
column
alias
FROM table

Hin th ni dung ca mt hay nhiu ct


Phn bit ni dung gia cc dng d liu tr v
Ly tt cc cc ct trong bng
Tn ct d liu cn tr v
Phn tiu ca ct d liu tr v
Tn bng cha d liu truy vn

V d:
SELECT
FROM emp;

Cu trc ca lnh truy vn gm c hai phn:


Mnh chn la bao gm Lnh SELECT v tn ct d liu tr v Mnh
biu din ni cha bao gm FROM v tn bng.

2.1.3. Cc thnh phn khc ca mnh SELECT Trong mnh SELECT


cn c th a vo cc thnh phn khc:
Biu thc ton hc
Column alias
Cc column c ghp chui
Literal
Biu thc ton hc
Trong mnh SELECT biu thc ton hc c th cc gi tr (column hoc hng s), cc ton t, cc hm.
Cc ton t c dng l (+), (-), (*), (/). u tin ca cc ton t ging trong phn s hc.
V d:
Trang 9

Oracle c bn - SQL v PL/SQL


SELECT ename, sal *12, comm FROM emp;
SELECT ename, (sal+250)*12 FROM emp;

Tiu ca ct (column alias)


Trong mnh SELECT, column alias l phn nhn hin th ca column khi ly s liu ra. Trong column
alias khng c c du cch v vit cch sau tn column mt du cch. Column alias c chp nhn c
du cch khi c t trong du nhy kp ( ).
V d: (ANUAL chnh l column alias)
SELECT ename, SAL*12 ANUAL, comm
FROM emp;

Ghp tip cc ct d liu


Ton t ghp tip chui (||) cho php ghp tip d liu trong cc ct khc nhau ca cng mt dng d liu
vi nhau thnh mt chui. Ta c th c nhiu ton t ghp chui trong cng mt column alias.
V d:
SELECT empno||ename EMPLOYEE
FROM emp;

Ghp tip chui k t


Trong mnh SELECT, ta c th thc hin ghp tip bt k k t no, biu thc hay s no m khng phi
l column hoc column alias.
V d:
SELECT empno || ename || WORK IN DEPARTMENT
|| deptno Employee Detail
FROM emp;

2.1.4. Phn bit gi tr d liu tr v


Trong thc t nhiu khi gi tr d liu trn cc dng d liu kt xut trng nhau. Gy nhiu bt tin. c
th ly c ch cc dng d liu phn bit vi nhau. Ta s dng mnh DISTINCT trong cu lnh truy
vn.
V d:
SQL> SELECT deoptno FROM dept;
DEPTNO
10
30
10
20
14 rows selected.
SQL> SELECT DISTINCT deoptno FROM dept;
DEPTNO
10
30
20
3 rows selected.

Trang 10

Oracle c bn - SQL v PL/SQL

2.1.5. Gi tr NULL
Ct c gi tr rng (NULL) l ct cha c gn gi tr, ni cch khc n cha c khi to gi tr. Cc ct
vi bt c kiu d liu no cng c th c tr NULL, tr khi c n l kha hay c rng buc ton vn NOT
NULL. Trong biu thc c bt k gi tr NULL no kt qu cng l NULL.
V d:
SELECT ename,
FROM emp;

sal*12

comm

ANUAL_SAL

NULL trong cc hm ca SQL


Trong cc hm lm vic vi tng ct hay hm v hng (scalar function). Cc hm loi ny tr v tr null
khi c tham s NULL, tr hm NVL v TRANSLATE c th tr v gi tr thc.
C php ca hm NVL:
NVL (DATECOLUMN,01-01-2001)
NVL(NUMBERCOLUMN, 9)
NVL(CHARCOLUMN,STRING)
NVL(comm,0) tr v tr 0 khi comm l null
SELECT ename, sal*12 + NVL(comm,0) ANUAL_SAL FROM emp;

Trong cc hm lm vic vi nhm cc ct (group function): Hu ht cc hm lm vic trn nhm b qua tr


null, v d nh khi s dng hm AVG tnh trung bnh cho mt ct c cc gi tr 1000, NULL, NULL,
NULL, 2000. Khi trung bnh c tnh l (1000+2000)/2=1500, nh vy tr null b b qua ch
khng phi xem l tr 0.

NULL trong cc biu thc so snh, iu kin


kim tra c phi NULL hay khng dng cc ton t IS NULL hoc IS NOT NULL. Nu trong biu
thc so snh c tr null tham gia v kt qu ca biu thc ph thuc vo tr null th kt qu l khng xc
nh, tuy nhin trong biu thc DECODE, hai gi tr null c xem l bng nhau trong php so snh.
Oracle xem cc biu thc vi kt qu khng xc nh tng ng vi FALSE. (V d: comm = NULL)
c kt qu khng xc nh v do biu thc so snh xem nh cho kt qu FALSE. Trong cu lnh sau
khng c mu tin no c chn
SELECT * FROM emp WHERE comm=NULL;

Nu mun chn cc nhn vin c comm l NULL th phi dng ton t IS NULL
SELECT * FROM emp WHERE comm IS NULL;

2.2.SQL*PLUS, CNG C TNG TC LNH SQL VI DATABASE


2.2.1. Cu lnh tng tc ca SQL*Plus
Oracle h tr cng c SQL*Plus cho php ngi s dng c th tng tc trc tip vi Oracle Server thng
qua cc cu lnh SQL v PL/SQL.
Theo ngi s dng c th tng tc vi Oracle Server thng qua hai loi cu lnh:
Cu lnh SQL
Cu lnh ca bn thn chng trnh SQL*Plus
Trang 11

Oracle c bn - SQL v PL/SQL

Hnh v 3. Cu lnh ca SQL*Plus

Khc bit gia lnh SQL v SQL*Plus


SQL
L ngn ng giao tip vi Oracle Server
trong vic truy xut d liu
Cu lnh da trn b k t chun ASCII
Thao tc trn cc d liu c trong cc bng
c nh ngha trong database
Cu lnh c np vo b nh m trn
mt hoc nhiu dng
Cu lnh khng c vit tt

SQL*Plus
Nhn dng lnh SQL v gi lnh ln
Server
Tu thuc vo tng phin bn ca Oracle Khng
thao tc vi d liu trong database
Cu lnh c ti trc tip khng thng qua b
m
Cu lnh c th vit tt

C s dng k t kt thc lnh khi thc hin Khng i hi phi c k t kt thc lnh
S dng cc hm trong vic nh dng d
liu

S dng cc lnh nh dng d liu ca


chnh SQL*Plus

2.2.2. Phn nhm cu lnh trong SQL*Plus


Cc lnh SQL*Plus c th phn thnh nhm chnh sau:
Nhm lnh

Din gii

Mi trng

Tc ng v gy nh hng ti mi trng lm vic ca SQL*Plus


trong phin lm vic hin ti.

nh dng d liu

nh dng li d liu tr v t server

Thao tc file

Lu gi, np v chy cc file scrips

Thc hin lnh

Gi cc lnh SQL c trong b m ln server

Son tho

Sa i li lnh SQL c trong b m


Trang 12

Oracle c bn - SQL v PL/SQL

Tng tc

Cho php ngi dng c th to cc bin s dng trong cu lnh


SQL v thao tc vi cc bin nh: nhp d liu, kt xut d liu.

Cc lnh khc

Cc lnh khc cho php kt ni ti c s d liu v hin th cc ct


d liu theo nh nh dng.

2.2.3. Chi tit cc lnh SQL*Plus c bn


Kt ni ti CSDL
C php:
Conn[ect]

<user_name>/<password>[@<database>];

Vi:
user_name
password
database

Tn truy nhp
Mt khu truy nhp
Tn database truy nhp

V d:
Conn

Tester/tester@DB1;

Hin th cu trc bng d liu


C php:
Desc[ribe]

<table_name>;

Vi:
table_name

Tn bng cn hin th cu trc

V d:
Desc
Name
DEPTNO
DNAME
LOC

Dept;
Null?

Type

NOT NULL

NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)

Lnh son tho


Tn lnh

Din gii

A[PPEND] text

a thm on text vo dng hin ti

C[HANGE] /old/new

Chuyn on text c thnh on text mi trong dng hin


ti

C[HANGE] /text/

Xo on text trong dng hin ti

CL[EAR] BUFF[ER]

Xo tt c cc dng trong SQL buffer

DEL

Xo dng hin ti

DEL n

Xo dng n

DEL m n

Xo dng t m n n

I[NPUT]

Thm mt s dng nht nh

I[NPUT] text

Thm dng c cha text

L[IST]

Lit k ton b cc dng trong SQL buffer


Trang 13

Oracle c bn - SQL v PL/SQL


L[IST] n

Lit k dng n

L[IST] m n

Lit k dng m n n

R[UN]

Hin th v chy lnh trong buffer

Nhy n dng n

N text

Thay dng n bi on text

0 text

Chn 1 dng trc dng 1

Lnh thao tc file


Din gii

Tn lnh
SAVE filename [.ext]
[REP[LACE]|APP[END]]

Ghi ni dung bufer thnh file. APPEND ghi thm vo file.


REPLACE chn ln ni dung file c.

GET filename [.ext]

Ghi ni dung file vo buffer. Mc nh phn ui l .sql Chy cc

STA[RT] filename [.ext]

lnh trong file

@ filename [.ext]

Ging lnh Start

ED[IT]

Son tho ni dung bufffer c tn l afiedt.buf chy ni dung


buffer dng lnh /

ED[IT]filename [.ext ]

Son tho ni dung file

SPO[OL] filename [.ext ]


[OFF|OUT]

Ct kt qu hin th trn mn hnh ra file. Vd:


SPOOL result.sql
SPOOL OFF

EXIT

Thot khi SQL*Plus

Lnh nh dng ct d liu


C php:
COLUMN [{column | alias} [option]]

Tn lnh

Din gii

CLE[AR]

Xo nh dng ca column

FOR[MAT] format

Chuyn nh dng ca ct d liu

HEA[DING] text

t nhn co column

JUS[TIFY] align

Cn tri - left , phi - right, gia - center cho nhn

NOPRI[NT]

n column

NUL[L] text

Hin th text nu gi tr ca column l NULL

PRI[NT}

Hin th column

TRU[NCATED]

Xo chui ti cui dng u tin khi hin th

WRA[PPED]

Ph cui chui ca dng tip theo

V d 1: Chnh nh dng v nhn ca column


Trang 14

Oracle c bn - SQL v PL/SQL


COLUMN ename HEADING Employee|Name FORMAT A15
COLUMN sal JUSTIFY LEFT FORMAT $ 99,990.00 COLUMN
hiredate FORMAT A9 NULL Not hired

V d 2: Hin th nh dng hin ti ca column


COLUMN
COLUMN ename

V d 3: Xo nh dng hin ti ca column


COLUMN ename CLEAR
CLEAR COLUMN

Cc loi nh dng
nh dng

Din gii

V d

Kt qu

An

Hin th di nht n k t dng cho cc column


dng k t hoc dng ngy

Hin th s, khng bao gm s 0

999999

1234

Hin th c s 0

099999

01234

$Hin thi $

$9999

$1234

Hin th k t L

L9999

L1234

Hin th du thp phn

9999.99

1234.00

Hin th du phn chia hng nghn

9,999

1,234

L
,

2.3.BI TP
1. Chn ton b thng tin trong bng SALGRADE
GRADE
LOSAL
HISAL
1
2
3
4
5

700
1201
1401
2001
3001

1200
1400
2000
3000
9999

2. Chn ton b thng tin trong bng EMP


EMPNO ENAME
JOB
MGR HIREDATE
7839
7698
7782
7566
7654
7499
7844
7900
7521
7902
7369
7788
7876
7934

KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER

PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
SALESMAN
ANALYST
CLERK
ANALYST
CLERK
CLERK

7839
7839
7839
7698
7698
7698
7698
7698
7566
7902
7566
7788
7782

17-11-1981
01-05-1981
09-06-1981
02-04-1981
28-09-1981
20-02-1981
08-09-1981
03-12-1981
22-02-1981
03-12-1981
17-12-1980
09-12-1982
12-01-1983
23-01-1982

SAL COMM
5000
2850
2450
2975
1250
1600
1500
950
1250
3000
800
3000
1100
1300

1400
300
0
500

DEPTNO
10
30
10
20
30
30
30
30
30
20
20
20
20
10

Trang 15

Oracle c bn - SQL v PL/SQL


3. Hin th mi loi ngh nghip
JOB
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN

4. Hin th tn nhn vin v thu nhp trong mt nm (REMUNERATION)


ENAME
REMUNERATION
KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER
14 rows selected.

60000
34200
29400
35700
16400
19500
18000
11400
15500
36000
9600
36000
13200
15600

5. Hin th theo ni dung di y Who,


what and when
KING HAS HELP THE POSITION OF PRESIDENT IN DEPT 10 SINCE 17-11-1981 BLAKE
HAS HELP THE POSITION OF MANAGER IN DEPT 30 SINCE 01-05-1981 CLARK HAS
HELP THE POSITION OF MANAGER IN DEPT 10 SINCE 09-06-1981 JONES HAS HELP
THE POSITION OF MANAGER IN DEPT 20 SINCE 02-04-1981 MARTIN HAS HELP THE
POSITION OF SALESMAN IN DEPT 30 SINCE 28-09-1981 ALLEN HAS HELP THE
POSITION OF SALESMAN IN DEPT 30 SINCE 20-02-1981 TURNER HAS HELP THE
POSITION OF SALESMAN IN DEPT 30 SINCE 08-09-1981 JAMES HAS HELP THE
POSITION OF CLERK IN DEPT 30 SINCE 03-12-1981 WARD HAS HELP THE POSITION
OF SALESMAN IN DEPT 30 SINCE 22-02-1981 FORD HAS HELP THE POSITION OF
ANALYST IN DEPT 20 SINCE 03-12-1981
SMITH HAS HELP THE POSITION OF CLERK
IN DEPT 20 SINCE 17-12-1980
SCOTT HAS HELP THE POSITION OF ANALYST IN DEPT 20 SINCE 09-12-1982
ADAMS HAS HELP THE POSITION OF CLERK
IN DEPT 20 SINCE 12-01-1983
MILLER HAS HELP THE POSITION OF CLERK
IN DEPT 10 SINCE 23-01-1982
14 rows selected.
6. Hin th cu trc bng emp;

7. Thay i nhn v nh dng hin th ca ct sal v hiredate trong bng emp;

Trang 16

Oracle c bn - SQL v PL/SQL

Chng 3. TRUY VN D LIU C IU KIN


3.1.CC GII HN TRONG TRUY VN D LIU
Trong phn ln cc trng hp ly d liu t database, ta ch cn ly mt phn d liu ch khng cn ly tt
c. hn ch cc d liu tr v khng cn thit, ta c th s dng mnh iu kin trong cu lnh truy
vn.

Hnh v 4. Hn ch d liu tr v

3.1.1. Mnh WHERE


C php:
SELECT [DISTINCT ] {*, column [alias],...}
FROM table
[WHERE condition (s)];

Vi:
column
alias
table
condition

tn ct d liu tr v
tiu ca ct d liu tr v
tn bng truy vn d liu
mnh iu kin lc d liu tr v

Mnh WHERE dng t iu kin cho ton b cu lnh truy vn. Trong mnh WHERE c th c cc
thnh phn:
Tn column
Ton t so snh
Tn column, hng s hoc danh sch cc gi tr

V d:
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000 ;
Trang 17

Oracle c bn - SQL v PL/SQL

Truy vn d liu vi nhiu iu kin


Mnh WHERE cho php ghp c nhiu iu kin thng qua cc ton t logic AND/OR. Ton t AND
yu cu d liu phi tho mn c 2 iu kin. Ton t OR cho php d liu tho mn 1 trong 2 iu kin.
V d:
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000
AND JOB = MANAGER;
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000
OR JOB = MANAGER;
SELECT DEPTNO, JOB,
FROM EMP
WHERE SAL > 1500
AND JOB = MANAGER
OR JOB =SALESMAN;

EMPNO,

ENAME,

SAL

SELECT DEPTNO, JOB,


FROM EMP
WHERE SAL > 1500
AND (JOB = MANAGER
OR JOB =SALESMAN);

EMPNO,

ENAME,

SAL

3.1.2. Cc ton t s dng trong mnh WHERE Ton t so


snh
Ton t
=
!=, ^=, '+, <\>
>

Din gii
Ton t bng hay tng ng
Ton t khc hay khng tng ng
Ton t ln hn

<

Ton t nh hn

>=

Ton t ln hn hoc bng

<=

Ton t nh hn hoc bng

Cc ton t ca SQL
Ton t
[NOT] BETWEEN x AND y
IN (danh sch):
x [NOT] LIKE y

IS [NOT] NULL
EXISTS

Din gii
[Khng] ln hn hoc bng x v nh hn hoc bng y Thuc bt k gi
tr no trong danh sch
ng nu x [khng] ging khung mu y
Cc k t dng trong khun mu:
Du gch di (_)
:
Ch mt k t bt k
Du phn trm (%) : Ch mt nhm k t bt k
Kim tra gi tr rng
Tr v TRUE nu c tn ti

Trang 18

Oracle c bn - SQL v PL/SQL

Cc ton t logic
Ton t

Din gii

NOT

Ph nh mnh

AND

Yu cu d liu phi tho mn c 2 iu kin

OR

Cho php d liu tho mn 1 trong 2 iu kin

Cp u tin khi thc hin i vi cc loi ton t


Cp u tin

Ton t

Cc ton t so snh

2
3
4

NOT
AND
OR

3.1.3. V d s dng cc ton t iu kin


[NOT] BETWEEN x AND y
V d chn nhn vin c lng nm trong khong 2000 v 3000
SELECT * FROM emp WHERE sal BETEEN 2000 AND 3000;

IN (danh sch)
Chn nhn vin c lng bng mt trong 2 gi tr 1400 hoc 3000
SELECT * FROM emp WHERE sal IN (1400, 3000);

Tm tn phng ban nu phng c nhn vin lm vic.


SELECT dname FROM dept WHERE EXISTS
(SELECT * FROM emp WHERE dept.deptno = emp.deptno);

x [NOT] LIKE y
Tm nhn vin c tn bt u bng chui SMITH
SELECT * FROM emp WHERE
ename LIKE 'SMITH_';

chn nhng nhn vin c tn bt u bng 'SM'


SELECT * FROM emp WHERE ename LIKE 'SM%';

tm nhng nhn vin c tn c chui 'A_B'


SELECT ename FROM emp WHERE ename LIKE '%A\_B%'; ESCAPE '\'

V k hiu "_" dng i din cho mt k t bt k nn nu khng c mnh ESCAPE, cu lnh trn s
tm tt c cc nhn vin tn AAB, ABB, ACB, v.v...
Nu mun k hiu "_" mang ngha nguyn thy, tc l khng cn i din cho k t bt k na, ta t du
"\" trc k hiu. ng thi khai bo thm mnh ESCAPE "\"
Trang 19

Oracle c bn - SQL v PL/SQL

Ta cng c th dng mt k t bt k thay cho "\". Chng hn mnh sau c cng kt qu vi mnh trn
SELECT ename FROM emp WHERE ename LIKE '%A^_B%'; ESCAPE '^';

Ta gi cc k t nh "\" hay "^" ni trn l cc k t ESCAPE.


IS [NOT] NULL
V d:
SELECT * FROM emp WHERE comm IS NULL ;

3.2.SP XP D LIU TR V
3.2.1. Mnh ORDER BY
C php:
SELECT [DISTINCT ] {*, column [alias],...}
FROM table;
[WHERE condition]
[ORDER BY expr/position [DESC/ASC]];

Mnh ORDER BY dng sp xp s liu c hin th v phi t v tr sau cng ca cu lnh truy
vn.
V d:
SELECT ENAME, JOB,
FROM EMP
ORDER BY ENAME;

SAL*12,

DEPTNO

Mnh ORDER BY mc nh sp xp theo th t tng dn ASC[ENDING]


S thp trc
Ngy nh trc
K t theo bng ch ci
sp xp theo th t ngc li (gim dn) t t kho DESC[ENDING] sau column cn sp th t.
Vi d:
SELECT ENAME, JOB, HIREDATE
FROM EMP
ORDER BY HIREDATE DESC ;

3.2.2. Sp xp nhiu ct d liu tr v


Mnh Order cn c th sp xp nhiu column. Cc column cn sp xp c vit th t sau mnh
ORDER BY v cch bi du phy (,). Column no gn mnh ORDER BY hn c mc u tin khi sp
xp cao hn. Ch nh cch thc sp xp ASC/DESC c vit sau column cch bi mt du cch.
V d:
SELECT DEPTNO, JOB, ENAME, SAL

Trang 20

Oracle c bn - SQL v PL/SQL


FROM EMP
ORDER BY DEPTNO, SAL DESC ;

Order gi tr NULL
Ring i vi gi tr NULL, nu sp xp theo th t ASCENDING s nm cc v tr cui cng.
Ch : C th ch nh sp xp theo th t cc column trong mnh SELECT.
V d:
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
ORDER BY 2;

3.3.BI TP
1. Chn nhn vin trong bng EMP c mc lng t 1000 n 2000 (chn cc trng
ENAME, DEPTNO, SAL).
ENAME

DEPTNO

SAL

30
30
30
30
20
10

1600
1250
1250
1500
1100
1300

ALLEN
WARD
MARTIN
TURNER
ADAMS
MILLER

2. Hin th m phng ban, tn phng ban, sp xp theo th t tn phng ban.


DEPTNO DNAME
10
40
20
30

ACCOUNTING
OPERATIONS
RESEARCH
SALES

3. Hin th danh sch nhng nhn vin lm ti phng 10 v 20 theo th t A,B,C


EMPNO ENAME JOB
7876
7782
7902
7566
7839
7934
7788
7369

ADAMS CLERK
CLARK MANAGER
FORD
ANALYST
JONES MANAGER
KING
PRESIDENT
MILLER CLERK
SCOTT ANALYST
SMITH CLERK

MGR HIREDATE
7788
7839
7566
7839

12-01-1983
09-06-1981
03-12-1981
02-04-1981
17-11-1981
7782 23-01-1982
7566 09-12-1982
7902 17-12-1980

SAL COMM DEPTNO


1100
2450
3000
2975
5000
1300
3000
800

20
10
20
20
10
10
20
20

4. Hin th tn v ngh nghip nhng nhn vin lm ngh th k (cleck) ti phng 20.
ENAME

JOB

SMITH
ADAMS

CLERK
CLERK

Trang 21

Oracle c bn - SQL v PL/SQL

5. Hin th tt c nhng nhn vin m tn c cc k t TH v LL.


ENAME
SMITH
ALLEN
MILLER

6. Hin th tn nhn vin, ngh nghip, lng ca nhng nhn vin c gim c qun
l.
ENAME

JOB

SAL

SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
SALESMAN
CLERK
CLERK
ANALYST
CLERK

800
1600
1250
2975
1250
2850
2450
3000
1500
1100
950
3000
1300

13 rows selected.

7. Hin th tn nhn vin, m phng ban, ngy gia nhp cng ty sao cho gia nhp cng
ty trong nm 1983.
ENAME

DEPTNO HIREDATE

ADAMS

20 12-JAN-83

8. Hin th tn nhn vin, lng mt nm (ANUAL_SAL ), thng sao cho lng ln


hn thng v ngh nghip l SALEMAN, sp theo th t lng gim dn v tn tng
dn.
ANUAL_SAL
19200
18000
15000

COMM
300
0
500

Trang 22

Oracle c bn - SQL v PL/SQL

Chng 4. CC HM SQL
4.1.TNG QUAN V HM SQL
4.1.1. Cu trc hm SQL
Hm SQL l mt c im lm tng kh nng s dng cu lnh SQL. Hm SQL c th nhn nhiu tham s
vo v tr v ch mt gi tr.

Hnh v 5. Cu trc hm SQL

Hm

SQL

mt

im

sau:

Thc hin vic tnh ton ngay trn d liu


C th thao tc, thay i ngay trn tng mc d liu tr v Hoc cng c th
thao tc trn nhm cc d liu tr v
C th nh dng li cc d liu tr v c kiu s, hay kiu thi gian C th
chuyn i kiu d liu tr v

4.1.2. Phn loi hm SQL


Hm SQL c th phn ra lm hai loi:
Hm tc ng trn tng dng d liu: Gi tr tr v tng ng vi tng d liu u
vo ti mi dng d liu.
Hm tc ng trn nhm cc dng d liu: Gi tr tr v tng ng vi cc php thao
tc trn nhm d liu tr v.

Trang 23

Oracle c bn - SQL v PL/SQL

Hnh v 6. Phn loi hm SQL

4.2.HM SQL THAO TC TRN TNG DNG D LIU


4.2.1. Cc hm thao tc trn kiu d liu s
u vo v u ra l cc gi tr kiu s

Mt s hm SQL hay dng


Hm SQL

Din gii

ROUND(n[,m])

Cho gi tr lm trn ca n (n cp m, mc nhin m=0)

TRUNC(n[,m])

Cho gi tr n ly m ch s tnh t chm thp phn

CEIL(n)

Cho s nguyn nh nht ln hn hoc bng n

FLOOR(n)

Cho s nguyn ln nht bng hoc nh hn n

POWER(m,n)

Cho ly tha bc n ca m

EXP(n)

Cho gi tr ca en

SQRT(n)

Cho cn bc 2 ca n, n>=0

SIGN(n)

Cho du ca n.
n<0 c SIGN(n)= -1
n=0 c SIGN(n)= 0
n>0 c SIGN(n)= 1

ABS(n)

Cho gi tr tuyt i

MOD(m,n)

Cho phn d ca php chia m cho n

Mt s hm kiu s tham kho khc


Hm SQL
LOG(m,n)
SIN(n)

Din gii
Cho logarit c s m ca n
Tr v cosin ca n (n tnh bng radian)

Trang 24

Oracle c bn - SQL v PL/SQL


COS(n)

Cho cosin ca n (n tnh bng radian) Tr v

TAN(n)

cotang ca n (n tnh bng radian)

V d hm ROUND(n[,m])
SELECT
ROUND(4.923,1),
ROUND(4.923),
ROUND(4.923,-1),
ROUND(4.923,2)
FROM DUMMY;
ROUND(4.923,1) ROUND(4.923) ROUND(4.923,-1) ROUND(4.923,2)
4.9

4.92

V d hm TRUNC(n[,m])
SELECT
TRUNC (4.923,1),
TRUNC (4.923),
TRUNC (4.923,-1),
TRUNC (4.923,2)
FROM DUMMY;
TRUNC(4.923,1) TRUNC(4.923) TRUNC(4.923,-1) TRUNC(4.923,2)
4.9

4.92

V d hm CEIL(n)
SELECT
CEIL (SAL), CEIL(99.9),CEIL(101.76), CEIL(-11.1)
FROM EMP
WHERE SAL BETWEEN 3000 AND 5000;
CEIL(SAL) CEIL(99.9) CEIL(101.76) CEIL(-11.1)
5000
3000
3000

100
100
100

102
102
102

-11
-11
-11

V d hm FLOOR(n)
SELECT FLOOR (SAL), FLOOR (99.9), FLOOR (101.76), FLOOR (-11.1)
FROM EMP
WHERE SAL BETWEEN 3000 AND 5000;
FLOOR(SAL) FLOOR(99.9) FLOOR(101.76) FLOOR(-11.1)
5000
3000
3000

99
99
99

101
101
101

-12
-12
-12

POWER(SAL,3),

POWER(50,5)

V d hm POWER(m,n)
SELECT SAL, POWER(SAL,2),
FROM EMP
WHERE DEPTNO =10;

SAL POWER(SAL,2) POWER(SAL,3) POWER(50,5)


Trang 25

Oracle c bn - SQL v PL/SQL

5000
2450
1300

25000000
6002500
1690000

1.2500E+11
1.4706E+10
2197000000

312500000
312500000
312500000

V d hm EXP(n)
SELECT EXP(4) FROM DUMMY;
EXP(4)
54.59815

V d hm SQRT(n)
SELECT SAL, SQRT(SAL),
FROM EMP
WHERE DEPTNO =10;

SQRT(40),

SQRT

(COMM)

SAL SQRT(SAL) SQRT(40) SQRT(COMM)


5000 70.7106781 6.32455532
2450
49.4974747
6.32455532
1300 36.0555128 6.32455532

V d hm SIGN(n)
SELECT SAL-NVL(COMM,0), SIGN(SAL-NVL(COMM,0)),
NVL(COMM,0)-SAL, SIGN(NVL(COMM,0)-SAL)
FROM EMP
WHERE DEPTNO =30
SAL-NVL(COMM,0)SIGN(SAL-NVL(COMM,0))NVL(COMM,0)-SAL SIGN(NVL(COMM,0)
SAL)
2850
-150
1300
1500
950
750

1
-1
1
1
1
1

-2850
150
-1300
-1500
-950
-750

-1
1
-1
-1
-1
-1

4.2.2. Cc hm thao tc trn kiu d liu k t


Hm SQL thao tc trn kiu d liu l k t
Hm SQL
CONCAT(char1, char2)
INITCAP(char)
LOWER(char)
LPAD(char1, n [,char2])

Din gii
Cho kt hp ca 2 chui k t, tng t nh s
dng ton t ||
Cho chui vi k t u cc t l k t
hoa
Cho chui k t vit thng (khng vit
hoa)
Cho chui k t c chiu di bng n. Nu chui
char1 ngn hn n th thm vo bn tri chui
char2 cho n k t. Nu chui char1 di hn n
th gi li n
Trang 26

Oracle c bn - SQL v PL/SQL

k t tnh t tri sang


LTRIM(char1, n [,char2])

B cc k t trng bn tri

NLS_INITCAP(char)

Cho chui vi k t u cc t l ch hoa, cc


ch cn li l ch thng

REPLACE(char,search_string[,replacem
ent_string])

Thay tt c cc chui search_string c trong


chui char bng chui
replacement_string.

RPAD(char1, n [,char2])

Ging LPAD(char1, n [,char2]) nhng


cn phi.

RTRIM(char1, n [,char2])

B cc k t trng bn phi

SOUNDEX(char)

Cho chui ng m ca char.

SUBSTR(char, m [,n])

Cho chui con ca chui char ly t v tr m v


phi n k t, nu khng ch n th ly cho n
cui chui

TRANSLATE(char, from, to)

Cho chui trong mi k t trong chui


from thay bng k t tng ng trong
chui to, nhng k t trong chui from
khng c tng ng trong chui to s b
loi b.

UPPER(char)

Cho chui ch hoa ca chui char

ASCII(char)

Cho k t ASCII ca byte u tin ca chui


char

INSTR(char1, char2 [,n[,m]])

Tm v tr chui char2 trong chui


char1 bt u t v tr n, ln xut hin
th m.

LENGTH(char)

Cho chiu di ca chui char

V d hm LOWER(char)
SELECT

LOWER(DNAME),

LOWER(SQL

COURSE)

FROM

DEPT;

LOWER(DNAME) LOWER('SQL
accounting
research
sales
operations

sql
sql
sql
sql

course
course
course
course

V d hm UPPER(char)
SELECT ENAME FROM EMP WHERE ENAME = UPPER(Smith);
ENAME
SMITH

V d hm INITCAP(char)
SELECT

INITCAP(DNAME),

INITCAP(LOC)

FROM

DEPT;

INITCAP(DNAME) INITCAP(LOC)
Trang 27

Oracle c bn - SQL v PL/SQL

Accounting
Research
Sales
Operations

New York
Dallas
Chicago
Boston

V d hm CONCAT(char1, char2)
SELECT CONCAT(ENAME, JOB) JOB FROM EMP WHERE EMPNO = 7900;
JOB
JAMES

CLERK

V d hm LPAD(char1, n [,char2])
SELECT LPAD(DNAME,20,*), LPAD(DNAME,20), LPAD(DEptno,20, )
FROM DEPT;
LPAD(DNAME,20,'*') LPAD(DNAME,20)
***ACCOUNTING
***RESEARCH
***SALES
***OPERATIONS

LPAD(DEPTNO,20,'')

ACCOUNTING
RESEARCH
SALES
OPERATIONS

10
20
30
40

V d hm RPAD(char1, n [,char2])
SELECT RPAD(DNAME,20,*), RPAD(DNAME,20), RPAD(DEptno,20, )
FROM DEPT;
RPAD(DNAME,20,'*') RPAD(DNAME,20)

RPAD(DEPTNO,20,'')

ACCOUNTING
RESEARCH
SALES
OPERATIONS

10
20
30
40

***
***
***
***

ACCOUNTING
RESEARCH
SALES
OPERATIONS

V d hm SUBSTR(char, m [,n])
SELECT
SUBSTR(ORACLE,2,4),
FROM DEPT;

SUBSTR(DNAME,2),

SUBSTR(DNAME,3,5)

SUBS SUBSTR(DNAME, SUBST


RACL
RACL
RACL
RACL

CCOUNTING
ESEARCH
ALES
PERATIONS

COUNT
SEARC
LES
ERATI

V d hm INSTR(char1, char2 [,n[,m]])


SELECT
DNAME, INSTR(DNAME, A), INSTR(DNAME,ES),
INSTR(DNAME,C,1,2)
FROM DEPT;
DNAME
ACCOUNTING

INSTR(DNAME,'A') INSTR(DNAME,'ES')
INSTR(DNAME,'C',1,2)
1

3
Trang 28

Oracle c bn - SQL v PL/SQL


RESEARCH
SALES
OPERATIONS

5
2
5

2
4
0

0
0
0

V d hm LTRIM(char1, n [,char2])
SELECT
DNAME, LTRIM(DNAME,A), LTRIM(DNAME,AS),
LTRIM(DNAME,ASOP)
FROM DEPT;
DNAME

LTRIM(DNAME,'A LTRIM(DNAME,'A LTRIM(DNAME,'A

ACCOUNTING
RESEARCH
SALES
OPERATIONS

CCOUNTING
RESEARCH
SALES
OPERATIONS

CCOUNTING
RESEARCH
LES
OPERATIONS

CCOUNTING
RESEARCH
LES
ERATIONS

V d hm RTRIM(char1, n [,char2])
SELECT
DNAME, RTRIM(DNAME,A), RTRIM(DNAME,AS),
RTRIM(DNAME,ASOP)
FROM DEPT;
DNAME

RTRIM(DNAME,'A RTRIM(DNAME,'A RTRIM(DNAME,'A

ACCOUNTING
RESEARCH
SALES
OPERATIONS

ACCOUNTING
RESEARCH
SALES
OPERATIONS

ACCOUNTING
RESEARCH
SALES
OPERATIONS

ACCOUNTING
RESEARCH
SALES
OPERATIONS

V d hm SOUNDEX(char)
SELECT ENAME, SOUNDEX(ENAME)
FROM EMP
WHERE SOUNDEX(ENAME)= SOUNDEX(FRED);
ENAME

SOUN

FORD

F630

V d hm LENGTH(char)
SELECT LENGTH(SQL
FROM DEPT;

COURSE),

LENGTH(DEPTNO),

LENGTH(DNAME)

LENGTH('SQLCOURSE') LENGTH(DEPTNO) LENGTH(DNAME)


10
10
10
10

2
2
2
2

14
14
14
14

V d hm TRANSLATE(char, from, to)


SELECT ENAME, TRANSLATE(ENAME,'C','F'),
TRANSLATE(JOB,'AR','IT')
FROM EMP
WHERE DEPTNO = 10;
ENAME

TRANSLATE( JOB

JOB,

TRANSLATE
Trang 29

Oracle c bn - SQL v PL/SQL

KING
CLARK
MILLER

KING
FLARK
MILLER

PRESIDENT PTESIDENT
MANAGER MINIGET
CLERK
CLETK

V d hm REPLACE(char,search_string[,replacement_string])
SELECT

JOB, REPLACE(JOB, SALESMAN, SALESPERSON), ENAME,


REPLACE(ENAME, CO,PR)

FROM EMP
WHERE DEPTNO =30 OR DEPTNO =20;
JOB

REPLACE(JOB,'SALESMAN', ENAME

MANAGER MANAGER
MANAGER MANAGER
SALESMAN SALESPERSON
SALESMAN SALESPERSON
SALESMAN SALESPERSON
CLERK
CLERK
SALESMAN SALESPERSON
ANALYST ANALYST
CLERK
CLERK
ANALYST ANALYST
CLERK
CLERK

BLAKE
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS

REPLACE(ENAME,'CO','
BLAKE
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SPRTT
ADAMS

V d cc hm lng nhau:
SELECT DNAME, LENGHT(DNAME), LENGHT(TRANSLATE,DNAME, AS,A))
FROM DEPT;
DNAME

LENGTH(DNAME) LENGTH(TRANSLATE(DNAME,'AS','A'))

ACCOUNTING
RESEARCH
SALES
OPERATIONS

14
14
14
14

14
13
12
13

4.2.3. Cc hm thao tc trn kiu d liu thi gian Hm SQL


thao tc trn kiu d liu l thi gian.
Hm SQL
MONTH_BETWEEN(d1,
ADD_MONTHS(d,n)
NEXT_DAY(d, char )
LAST_DAY(d)

d2)

Din gii
Cho bit s thng gia ngy d1 v d2. Cho ngy d
thm n thng.
Cho ngy tip theo ngy d c th ch bi char. Cho
ngy cui cng trong thng ch bi d.

V d hm MONTH_BETWEEN(d1, d2)
SELECT
MONTHS_BETWEEN( SYSDATE, HIREDATE),
MONTHS_BETWEEN('01-01-2000','05-10-2000')
FROM EMP
WHERE MONTHS_BETWEEN( SYSDATE,HIREDATE)>240;
MONTHS_BETWEEN(SYSDATE,HIREDATE) TWEEN('01-01-2000','05-10-2000')

Trang 30

Oracle c bn - SQL v PL/SQL


241.271055
241.206539
243.367829

-9.1290323
-9.1290323
-9.1290323

V d hm ADD_MONTHS(d,n)
SELECT
HIREDATE,
FROM EMP
WHERE DEPTNO=20;

ADD_MONTHS(HIRE,3),

ADD_MONTHS(HIREDATE,-3)

HIREDATE ADD_MONTHS ADD_MONTHS


02-04-1981
02-07-1981
02-01-1981
03-12-1981
03-03-1982
03-09-1981
17-12-1980
17-03-1981
17-09-1980
09-12-1982
09-03-1983
09-09-1982
12-01-1983 12-04-1983 12-10-1982

V d hm NEXT_DAY(d, char )
SELECT
HIREDATE,
FROM EMP
WHERE DEPTNO = 10;

NEXT_DAY(HIREDATE,FRIDAY),

NEXT_DAY(HIREDATE,6)

HIREDATE NEXT_DAY(H NEXT_DAY(H


17-11-1981
20-11-1981
20-11-1981
09-06-1981
12-06-1981
12-06-1981
23-01-1982 29-01-1982 29-01-1982

V d hm LAST_DAY(d)
SELECT SYSDATE, LAST_DAY(SYSDATE),
LAST_DAY(15-01-2001)
FROM EMP
WHERE DEPTNO =20;
SYSDATE

HIREDATE,

LAST_DAY(HIREDATE),

LAST_DAY(S HIREDATE LAST_DAY(H LAST_DAY('

28-03-2001 31-03-2001 02-04-1981 30-04-1981 31-01-2001 2803-2001 31-03-2001 03-12-1981 31-12-1981 31-01-2001 28-032001 31-03-2001 17-12-1980 31-12-1980 31-01-2001 28-032001 31-03-2001 09-12-1982 31-12-1982 31-01-2001 28-032001 31-03-2001 12-01-1983 31-01-1983 31-01-2001

Mt s hm khc c th p dng cho kiu ngy


Hm SQL
ROUND(date1)
ROUND(date1,MONTH)

ROUND(date1,YEAR)

TRUNC(date1,

MONTH)

TRUNC(date1, YEAR)

Din gii
Tr v ngy date 1 ti thi im gia tra 12:00 AM
Nu date 1 nm trong na thng u tr v ngy u tin ca thng,
ngc li s tr v ngy u tin ca thng sau.
Nu date 1 nm trong na nm u tr v ngy u tin
ca thng, ngc li s tr v ngy u tin ca nm
sau.
Tr v ngy u tin ca thng cha date1 Tr v ngy u tin ca
nm cha date1

Trang 31

Oracle c bn - SQL v PL/SQL

4.2.4. Cc hm chuyn i kiu


Hm SQL
TO_CHAR(number|date,
fmt)
TO_NUMBER(char)
TO_DATE(chsr,fmt)
DECODE(EXPR,
SEARCH1,
RESULT1, SEARCH2,
RESULT2, DEFAULT):
NVL(COL|VALUE, VAL)
Greatest(col|value1,
col|value2)

Din gii
Chuyn kiu s v ngy v kiu k t.
Chuyn k t c ni dung s sang s
Chuyn k t sang kiu ngy vi nh dng t trong
fmt.
So snh biu thc expr vi gi tr search nu ng tr v gi tr
result nu khng tr v gi tr default.
Chuyn gi tr COL|VALUE thnh val nu null. Tr gi tr
ln nht trong dy gi tr.

V d:
SELECT To_char (sysdate, day, ddth month yyyy) from dummy;
SELECT EMPNO, ENAME, HIREDATE
FROM EMP
WHERE HIREDATE = TO_DATE (June 4, 1984, month dd, yyyy);
INSERT INTO EMP (EMPNO, DEPTNO, HIREDATE
VALUES (777, 20, TO_DATE(19-08-2000, DD-MM-YYYY);
SELECT
ENAME, JOB,
DECODE (JOB, CLERK,WWORKER,MANAGER,BOSS,UNDEFINED)
DECODED_JOB
FROM EMP;
SELECT GREATEST(1000,2000),
WHERE DEPTNO = 10;

GREATEST(SAL,COMM)

FROM

EMP

Cc khun dng ngy


Hm SQL

Din gii

SCC hoc CC

Th k; S ch ngy BC

YYYY hoc SYYYY

Nm; S ch ngy BC

YYY, YY, Y

Ch nm vi 3,2,1 k t s

IYYY, IYY, IY, I

Ch nm theo chun ISO

SYEAR, YEAR

Ch nm theo cch pht m ca ngi anh;

Qu trong nm

MM

Gi tr thng vi 2 s (01-12)

MONTH

Tn y ca thng theo ting anh, di 9

MON

Thng vi 3 k t vin tt (JAN, FEB...)

WW, W

Tun trong nm hoc trong thng

DDD, DD, D

Ngy trong nm, thng hoc tun

DAY

Ch th trong tun

DY

Ch th trong tun vi 3 k t vit tt


Trang 32

Oracle c bn - SQL v PL/SQL

Ngy Julian; bt u t ngy 31/12/4713 trc cng


nguyn

AM, PM

Ch nh sng, chiu

HH, HH12 HH24

Ch gi trong ngy (1-12) hoc (0-23)

MI

Pht (0-59)

SS

Giy (0-59)

SSSSS

S giy n na m (0-86399)

/ . , -

c t ng thm khi t trong khun dng

char

on k t t trong nhy p c t ng thm khi


t trong khun dng

TH

Thm phn th t (1st, 2nd, 4th )

SP

Pht m s ( FOUR vi DDSP)

SPTH, THSP

Pht m v chuyn sang dng th t ( First, second, ...)

RR

Ngy chuyn giao thin nin k vi cc nm <1999.

0-49

Nm
Nm hin t

50-99

0-49

th k hin ti

Th k sau

50-99

Th k trc

Th k hin ti

Mt s khun dng s
Din gii

K t

V d

Kt qu

Xc nh hin th 1 s

999999

1234

Hin th c s 0 u nu di khun
dng ln hn s hin c

099999

001234

$Thm k t tin t

$999999

Thm k t tin t bn a

L999999

Du thp phn

999999.99

Du phn cch phn nghn

999,999

1,234

MI

Du m bn phi ( vi cc gi tr m)

999999MI

1234-

PR

Thm ngoc nhn vo cc gi tr m

999999PR

<1234>

99.9999RRRR

1.234E+03

EEE Chuyn sang hin th s E

$1234
FF1234
1234.00

Nhn vi 10 n, n l s cc s 9 t sau V

9999V99

123400

Hin th c gi tr 0 nu = 0.

B9999.99

1234.00

Trang 33

Oracle c bn - SQL v PL/SQL

4.3.HM THAO TC TRN TP HP


4.3.1. Cc hm tc ng trn nhm
Cc hm tc ng trn nhm cc dng d liu hay tc ng ln mt tp hp cc cc dng d liu bao gm:
Hm SQL
AVG([DISTINCT/ALL] n)
COUNT([DISTINCT/ALL] expr)
MAX([DISTINCT/ALL] expr)
MIN([DISTINCT/ALL] expr)
STDDVE([DISTINCT/ALL] n)
SUM([DISTINCT/ALL] n)
VARIANCE([DISTINCT/ALL] n)

Din gii
Gi tr trung bnh ca n,khng k tr null S
row c expr khc null
Gi tr ln nht ca expr
Gi tr nh nht ca expr
Phng sai ca n khng k tr null Tng ca
ca n khng k tr null Variance ca n khng
k tr null

Ch : Tt c cc hm trn nhm mu tin u b qua gi tr NULL tr hm COUNT. Dng hm NVL


chuyn i v tnh gi tr NULL.
C 2 cch dng cc cc hm ny
Tc ng trn ton b cc dng d liu ca cu lnh truy vn
Tc ng trn mt nhm d liu cng tnh cht ca cu lnh truy vn. Cng tnh cht
c ch bi mnh :
[GROUP BY expr]
[HAVING condition]

V d: Tc ng trn ton b cc dng d liu ca cu lnh truy vn:


Tnh mc lng trung bnh ca ton b nhn vin
Select AVG(SAL)
FROM EMP;

Tnh mc lng thp nht ca nhn vin lm ngh CLERK


Select MIN(SAL)
FROM EMP
WHERE JOB =CLERK:

V d: Tc ng trn mt nhm d liu cng tnh cht ca cu lnh truy vn.


Tnh mc lng trung bnh ca tng loi ngh nghip
SELECT JOB, AVG(SAL)
FROM EMP
GROUP BY JOB;

Ch : Ch c cng t trong mnh SELECT cc hm nhm hoc cc column t trong mnh


GROUP BY.
V d:
ng:

SELECT MAX(SAL), JOB


FROM EMP
GROUP BY JOB;

Trang 34

Oracle c bn - SQL v PL/SQL


Sai:

SELECT MAX(SAL), JOB


FROM EMP;

4.3.2. Mnh GROUP BY


C php:
SELECT [DISTINCT ] {*, column [alias],...}
FROM table;
[WHERE condition]
[GROUP BY expr]
[HAVING condition]
[ORDER BY expr/position [DESC/ASC]]

Mnh GROUP BY s nhm cc dng d liu c cng gi tr ca expr. V d:


GROUP BY JOB ngha l s nhm cc ngh ging nhau.

Mnh HAVING l t iu kin ca nhm d liu. Mnh ny khc mnh WHERE ch mnh
WHERE t iu kin cho ton b cu lnh SELECT.
V d:
SELECT JOB, MAX(SAL)
FROM EMP
WHERE JOB !=MANAGER
GROUP BY JOB;
JOB
ANALYST
CLERK
PRESIDENT
SALESMAN

MAX(SAL)
3000
1300
5000
1600

SELECT JOB, MAX(SAL)


FROM EMP
GROUP BY JOB
HAVING COUNT(*)>3;
JOB
CLERK
SALESMAN

MAX(SAL)
1300
1600

SELECT JOB, MAX(SAL)


FROM EMP
HAVING MAX(SAL)>=3000
GROUP BY JOB;
JOB
ANALYST
PRESIDENT

MAX(SAL)
3000
5000

Trang 35

Oracle c bn - SQL v PL/SQL

4.4.MT S HM MI B SUNG TRONG Oracle9i


4.4.1. Hm NULLIF
C php:
NULLIF(expr1, expr2)
Hm tr v gi tr NULL nu biu thc th nht bng biu thc th 2. Trong trng hp ngc li, n tr v
gi tr ca biu thc th nht.

4.4.2. Hm COALSCE
C php:
COALESCE(expr1, expr2, expr3, ...)
Tr v gi tr ca tham s u tin khc null

4.4.3. Cu lnh case


V d:
Case cu lnh
SELECT ENAME, EXTRACT(YEAR FROM HIREDATE) AS YEAR_OF_HIRE,
(CASE EXTRACT(YEAR FROM HIREDATE)
WHEN 2002 THEN 'NEW HIRE'
WHEN 1997 THEN 'FIVE YEARS SERVICE'
WHEN 1992 THEN 'TEN YEARS SERVICE'
ELSE 'NO AWARD THIS YEAR'
END ) AS AWARD
FROM EMP;
CASE biu thc
SELECT ENAME, SAL,
(CASE
WHEN JOB = DBA THEN SAL * 1.5
WHEN HIREDATE < SYSDATE - TO_YMINTERVAL(05-00) THEN SAL
* 1.25
WHEN DEPTNO IN (40,30,10) THEN SAL * 1.1
ELSE SAL * .9
END ) AS NEW_SAL
FROM EMP;

4.5.BI TP
4.5.1. Hm trn tng dng d liu
1. Lit k tn nhn vin, m phng ban v lng nhn vin c tng 15% (PCTSAL).
DEPTNO ENAME
10
30
10
20

KING
BLAKE
CLARK
JONES

PCTSAL
5000
2850
2450
2975
Trang 36

Oracle c bn - SQL v PL/SQL


30
30
30
30
30
20
20
20
20
10

MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER

1250
1600
1500
950
1250
3000
800
3000
1100
1300

2. Vit cu lnh hin th nh sau:


EMPLOYEE_AND_JOB
KING***
*PRESIDENT
BLAKE***
**MANAGER
CLARK***
**MANAGER
JONES***
**MANAGER
MARTIN******SALESMAN
ALLEN***
*SALESMAN
TURNER******SALESMAN
JAMES***
*CLERK
WARD***
**SALESMAN
FORD***
***ANALYST
SMITH***
*CLERK
SCOTT***
**ANALYST
ADAMS***
*CLERK
MILLER***
***CLERK

3. Vit cu lnh hin th nh sau:


EMPLOYEE
KING (President)
BLAKE (Manager)
CLARK (Manager)
JONES (Manager)
MARTIN (Salesman)
ALLEN (Salesman)
TURNER (Salesman)
JAMES (Clerk)
WARD (Salesman)
FORD (Analyst)
SMITH (Clerk)
SCOTT (Analyst)
ADAMS (Clerk)
MILLER (Clerk)

4. Vit cu lnh hin th nh sau:


ENAME

DEPTNO JOB

BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD

30
30
30
30
30
30

Manager
Salesperson
Salesperson
Salesperson
Clerk
Salesperson

Trang 37

Oracle c bn - SQL v PL/SQL

5. Tm ngy th 6 u tin cch 2 thng so vi ngy hin ti hin th ngy di dng 09


February 1990.
6. Tm thng itn v tn nhn vin, ngy gia nhp cng ty ca nhn vin phng s 20,
sao cho hin th nh sau:
ENAME

DATE_HIRED

JONES
FORD
SMITH
SCOTT
ADAMS

april,SECOND 1981
december,THIRD 1981
december,SEVENTEENTH 1980
december,NINTH 1982
january,TWELFTH 1983

7. Hin th tn nhn vin, ngy gia nhp cng ty, ngy xt nng lng (sau ngy gia
nhp cng ty 1 nm), sp xp theo th t ngy xt nng lng.
ENAME

HIREDATE REVIEW

SMITH
ALLEN
WARD
JONES
BLAKE
CLARK
TURNER
MARTIN
KING
JAMES
FORD
MILLER
SCOTT
ADAMS

17-12-1980
20-02-1981
22-02-1981
02-04-1981
01-05-1981
09-06-1981
08-09-1981
28-09-1981
17-11-1981
03-12-1981
03-12-1981
23-01-1982
09-12-1982
12-01-1983

17-12-1981
20-02-1982
22-02-1982
02-04-1982
01-05-1982
09-06-1982
08-09-1982
28-09-1982
17-11-1982
03-12-1982
03-12-1982
23-01-1983
09-12-1983
12-01-1984

8. Hin th tn nhn vin v lng di dng


ENAME

SALARY

ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
SCOTT
SMITH
TURNER
WARD

BELOW 1500
1600
2850
2450
3000
BELOW 1500
2975
5000
BELOW 1500
BELOW 1500
3000
BELOW 1500
On Target
BELOW 1500

9. Cho bit th ca ngy hin ti


10. a chui di dng nn/nn, kim tra nu khng khun dng tr li l YES, ngc li
l NO. Kim tra vi cc chui 12/34, 01/1a, 99\88
VALUE VALID?

Trang 38

Oracle c bn - SQL v PL/SQL


12/34 YES

11. Hin th tn nhn vin, ngy gia nhp cng ty, ngy lnh lng sao cho ngy lnh
lng phi vo th 6, nhn vin ch c nhn lng sau t nht 15 ngy lm vic ti
cng ty, sp xp theo th t ngy gia nhp cng ty.

4.5.2. Hm trn nhm d liu


1. Tm lng thp nht, ln nht v lng trung bnh ca tt c cc nhn vin

2. Tm lng nh nht v ln ca mi loi ngh nghip

3. Tm xem c bao nhiu gim c trong danh sch nhn vin.

4. Tm tt c cc phng ban m s nhn vin trong phng >3


5. Tm ra mc lng nh nht ca mi nhn vin lm vic cho mt gim c no
sp xp theo th t tng dn ca mc lng.

Trang 39

Oracle c bn - SQL v PL/SQL

Chng 5. LNH TRUY VN D LIU M RNG


5.1.KT HP D LIU T NHIU BNG
5.1.1. Mi lin kt tng ng
Mi lin kt tng ng c th hin trong mnh WHERE.
lin kt trong mnh WHERE phi ch r tn ca cc column v mnh c t tng ng.
V d:
emp.deptno =dept.deptno

Cc column trng tn phi c ch r column nm bng no thng qua tn hoc qua alias. Tn trng
ny c th t trong cc mnh khc nh SELECT, ORDER BY..
V d:
SELECT DEPT.DEPTNO, ENAME,JOB,
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY DEPT.DEPTNO;
SELECT A.DEPTNO, A.ENAME,
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
ORDER BY A.DEPTNO;

DNAME

A.JOB,

B.DNAME

5.1.2. Mi lin kt khng tng ng


Mi lin kt tng ng c th hin trong mnh WHERE.
lin kt trong mnh WHERE phi ch r tn ca cc column v mnh c t khng tng ng.
V d:
WHERE E.SAL BETWEEN S. LOSAL AND S.HISAL

Cc column trng tn phi c ch r column nm bng no thng qua tn hoc qua alias. Tn trng
ny c th t trong cc mnh khc nh SELECT, ORDER BY..
V d:
SELECT E.ENAME,E.JOB, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S. LOSAL AND S.HISAL;

Ch : iu kin lin kt ng l s cc bng - 1 = s cc iu kin lin kt

5.1.3. Mi lin kt cng


Mi lin kt cng tr v c cc gi tr NULL trong biu thc iu kin. Du (+) v no tnh thm cc gi
tr NULL v .
Mt cu lnh select ch t c 1 mi lin kt cng, du (+) t bn phi column lin kt

Trang 40

Oracle c bn - SQL v PL/SQL

Trong mnh WHERE ca mi lin kt cng khng c dng ton t IN hoc OR ni cc iu kin lin
kt khc.
V d:
SELECT
FROM
WHERE
AND
ENAME

E.ENAME, D.DEPTNO, D.DNAME


EMP E, DEPT D
E.DEPTNO (+)=D.DEPTNO
D.DEPTNO IN (30, 40);
DEPTNO DNAME

BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD

30
30
30
30
30
30
40

SALES
SALES
SALES
SALES
SALES
SALES
OPERATIONS

5.1.4. Lin kt ca bng vi chnh n (t thn)


C th lin kt bng vi chnh n bng cch t alias.
V du:
Select e.ename emp_name, e.sal emp_sal,
m.ename mgr_name, m.sal mgr_sal
from
emp e, emp m
where
e.mgr = m.empno
and e.sal <m.sal;
EMP_NAME
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
SMITH
ADAMS
MILLER

EMP_SAL MGR_NAME
2850
2450
2975
1250
1600
1500
950
1250
800
1100
1300

MGR_SAL

KING
KING
KING
BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
FORD
SCOTT
CLARK

5000
5000
5000
2850
2850
2850
2850
2850
3000
3000
2450

5.1.5. Cch biu din kt ni mi trong Oracle 9i Tch -cc


CROSS JOIN (Cartesian Product)
SELECT E.ENAME, D.DNAME
FROM EMP E CROSS JOIN DEPT D;

Kt ni t nhin NATURAL JOIN (Equijoin on All Identically Named Columns).


SELECT E.ENAME, D.DNAME
FROM EMP E NATURAL JOIN DEPT D;

Mnh USING (Tng t nh Natural Join, nhng cho php ch r tn ct c s dng trong php kt
ni).

Trang 41

Oracle c bn - SQL v PL/SQL


SELECT E.ENAME, D.DNAME
FROM EMP E JOIN DEPT D USING (DEPTNO);

Mnh ON (Ch r tn ct tham gia trong php kt ni)


SELECT E.ENAME, D.DNAME
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);
Kt ni tri LEFT OUTER JOIN
SELECT E.ENAME, D.DNAME
FROM EMP E LEFT OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);

Kt ni tri RIGHT OUTER JOIN


SELECT E.ENAME, D.DNAME
FROM EMP E RIGHT OUTER JOIN DEPT D ON (E.DEPTNO= D.DEPTNO);

Kt ni FULL OUTER JOIN (All records from both tablesIdentical to a union of left outer join and right
outer join)
SELECT E.ENAME, D.DNAME
FROM EMP E FULL OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);

5.1.6. Cc ton t tp hp
Tn ton t
UNION

Din gii
Kt hp kt qu ca nhiu cu hi vi nhau, ch gi li mt i din cho cc mu tin
trng nhau.

UNION ALL Kt hp kt qu ca nhiu cu hi vi nhau, cc mu tin trng nhau

cng c lp li

INTERSET

Ly phn giao cc kt qu ca nhiu cu hi

MINUS

Ly kt qu c trong cu hi th nht m khng c trong cu hi th hai (cu hi sau


ton t MINUS)

V d:
Select job from emp where deptno = 10
Union
Select job from emp where deptno = 30;
JOB
CLERK
MANAGER
PRESIDENT
SALESMAN

Trang 42

Oracle c bn - SQL v PL/SQL

5.2.LNH TRUY VN LNG


5.2.1. Cu lnh SELECT lng nhau.
Trong mnh WHERE
Tm nhng nhn vin lm cng ngh vi BLAKE
select ename, job
from emp
where job = (select job from emp where ename = BLAKE);
ENAME

JOB

BLAKE
CLARK
JONES

MANAGER
MANAGER
MANAGER

Trong mnh HAVING


Tm nhng phng c mc lng trung bnh ln hn phng 30
SELECT DEPTNO, AVG(SAL) FROM EMP
HAVING AVG(SAL) > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO =30)
GROUP BY DEPTNO;
DEPTNO AVG(SAL)
10 2916.66667
20
2175

5.2.2. Ton t SOME/ANY/ALL/NOT IN/EXITS


Tn ton t

Din gii

NOT IN

Khng thuc

ANY v SOME

So snh mt gi tr vi mi gi tr trong mt danh sch hay trong kt qu tr v


ca cu hi con, phi sau ton t =

ALL

So snh mt gi tr vi mi gi tr trong danh sch hay trong kt qu tr v ca


cu hi con.

EXISTS

Tr v TRUE nu c tn ti.

V d:
SELECT * FROM emp
WHERE sal = ANY (SELECT sal FROM emp WHERE deptno=30);
SELECT * FROM emp
WHERE sal >= ALL (select distinct sal
From emp
Where deptno =30)
Order by sal desc;
SELECT ENAME, SAL, JOB, DEPTNO
FROM EMP
WHERE SAL > SOME (SELECT DISTINCT SAL
FROM EMP
WHERE DEPTNO =30)

Trang 43

Oracle c bn - SQL v PL/SQL


ORDER BY SAL DESC;

Tm nhng ngi c nhn vin


SELECT EMPNO, ENAME, JOB, DEPTNO
FROM EMP E
WHERE EXISTS (SELECT EMPNO FROM EMP WHERE EMP.MGR = E.EMPNO);

5.3.CU TRC HNH CY


5.3.1. Cu trc hnh cy trong 1 table
Trong mt table ca CSDL Oracle c th hin cu trc hnh cy. V d trong bng EMP cu trc th hin cp
qun l.
Root node: l node cp cao nht
Child node: l node con hay khng phi l root node Parent
node: l node c node con
Leaf node:
l node khng c node con

Level (cp)
Level l mt ct gi cha cp trong cu trc hnh cy. V d.
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP
CONNECT BY PRIOR EMPNO = MGR
START WITH MGR is NULL;
LEVEL

DEPTNO

1
2
3
3
3
3
3
2
3
2
3
4
3
4

10
30
30
30
30
30
30
10
10
20
20
20
20
20

EMPNO ENAME
7839
7698
7654
7499
7844
7900
7521
7782
7934
7566
7902
7369
7788
7876

KING
BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD
CLARK
MILLER
JONES
FORD
SMITH
SCOTT
ADAMS

JOB
PRESIDENT
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
SALESMAN
MANAGER
CLERK
MANAGER
ANALYST
CLERK
SALEMAN
CLERK

SAL
5000
2850
1250
1600
1500
950
1250
2450
1300
2975
3000
800
3300
1100

5.3.2. K thut thc hin


C th nh ngha quan h tha k trong cu hi bng mnh STAR WITH v CONNECT BY trong cu
lnh SELECT, mi mu tin l mt node trong cy phn cp. Ct gi LEVEL cho bit cp ca mu tin hay cp
ca node trong quan h tha k.
C php:
SELECT [DISTINCT/ALL] [expr [c_ias]]
FROM [table/view/snapshot] [t_alias]
[WHERE condition]
[START WITH condition CONNECT BY PRIOR condition]
[GROUP BY expr] [HAVING condition]
[UNION/UNION ALL/INTERSET/MINUS select command]
Trang 44

Oracle c bn - SQL v PL/SQL


[ORDER BY expr/position [DESC/ASC]]

Vi:
START WITH
CONNECT BY
PRIOR

c t im u ca hnh cy. Khng th column


gi level mnh ny.
Ch column trong mi lin h tnh cy.
nh hng cu trc. Nu prior xut hin trc mgr,
Mgr s c tm trc sau n empno, y l hnh
cy hng ln. Nu prior xut hin trc empno,
empno s c tm trc sau n empno, y l
hnh cy hng xung.

V d:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP
CONNECT BY PRIOR MGR = EMPNO
START WITH empno = 7876;
LEVEL

DEPTNO

1
2
3
4

20
20
20
10

EMPNO ENAME
7876
7788
7566
7839

ADAMS
SCOTT
JONES
KING

JOB
CLERK
SALEMAN
MANAGER
PRESIDENT

SAL
1100
3300
2975
5000

5.3.3. Mnh WHERE trong cu trc hnh cy


Mnh WHERE v CONNECT BY c th c dng ng thi trong cu trc hnh cy. Nu
mnh WHERE loi tr mt s row ca cu trc hnh cy th ch nhng row c loi
tr. Nu iu kin t trong mnh CONNECT BY th ton b nhnh ca row b loi tr.
V d 1:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP WHERE ENAME != SCOTT
CONNECT BY PRIOR EMPNO = MGR
START WITH MGR IS NULL;
LEVEL

DEPTNO

1
2
3
3
3
3
3
2
3
2
3
4
4

10
30
30
30
30
30
30
10
10
20
20
20
20

EMPNO ENAME
7839
7698
7654
7499
7844
7900
7521
7782
7934
7566
7902
7369
7876

KING
BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD
CLARK
MILLER
JONES
FORD
SMITH
ADAMS

JOB
PRESIDENT
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
SALESMAN
MANAGER
CLERK
MANAGER
ANALYST
CLERK
CLERK

SAL
5000
2850
1250
1600
1500
950
1250
2450
1300
2975
3000
800
1100

V d 2:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP
CONNECT BY PRIOR EMPNO = MGR AND ENAME != SCOTT
Trang 45

Oracle c bn - SQL v PL/SQL


START WITH MGR IS NULL;
LEVEL

DEPTNO

1
2
3
3
3
3
3
2
3
2
3
4

10
30
30
30
30
30
30
10
10
20
20
20

EMPNO ENAME
7839
7698
7654
7499
7844
7900
7521
7782
7934
7566
7902
7369

JOB

KING
BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD
CLARK
MILLER
JONES
FORD
SMITH

PRESIDENT
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
SALESMAN
MANAGER
CLERK
MANAGER
ANALYST
CLERK

SAL
5000
2850
1250
1600
1500
950
1250
2450
1300
2975
3000
800

5.4.BI TP
1. Hin th ton b tn nhn vin v tn phng ban lm vic sp xp theo tn phng
ban.

2. Hin th tn nhn vin, v tr a l, tn phng vi iu kin lng >1500.


ENAME

LOC

DNAME

KING
BLAKE
CLARK
JONES
ALLEN
FORD
SCOTT

NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
DALLAS
DALLAS

ACCOUNTING
SALES
ACCOUNTING
RESEARCH
SALES
RESEARCH
RESEARCH

3. Hin th tn nhn vin, ngh nghip, lng v mc lng.


ENAME

JOB

JAMES
SMITH
ADAMS
MARTIN
WARD
MILLER
ALLEN
TURNER
BLAKE
CLARK
JONES
FORD
SCOTT
KING

CLERK
CLERK
CLERK
SALESMAN
SALESMAN
CLERK
SALESMAN
SALESMAN
MANAGER
MANAGER
MANAGER
ANALYST
ANALYST
PRESIDENT

SAL

GRADE

950
800
1100
1250
1250
1300
1600
1500
2850
2450
2975
3000
3000
5000

1
1
1
2
2
2
3
3
4
4
4
4
4
5

4. Hin th tn nhn vin, ngh nghip, lng v mc lng, vi


lng=3.
ENAME

JOB

ALLEN
TURNER

SALESMAN
SALESMAN

SAL

GRADE

1600
1500

3
3

iu kin mc

Trang 46

Oracle c bn - SQL v PL/SQL

5. Hin th nhng nhn vin ti DALLAS


ENAME

LOC

SAL

JONES
FORD
SMITH
SCOTT
ADAMS

DALLAS
DALLAS
DALLAS
DALLAS
DALLAS

2975
3000
800
3000
1100

6. Hin th tn nhn vin , ngh nghip, lng, mc lng, tn phng lm vic tr nhn
vin c ngh l cleck v sp xp theo chiu gim.
ENAME

JOB

SAL

MARTIN
WARD
ALLEN
TURNER
BLAKE
CLARK
JONES
FORD
SCOTT
KING

SALESMAN
SALESMAN
SALESMAN
SALESMAN
MANAGER
MANAGER
MANAGER
ANALYST
ANALYST
PRESIDENT

GRADE DNAME

1250
1250
1600
1500
2850
2450
2975
3000
3000
5000

2
2
3
3
4
4
4
4
4
5

SALES
SALES
SALES
SALES
SALES
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
ACCOUNTING

7. Hin th chi tit v nhng nhn vin kim c 36000


$ 1 nm hoc ngh l cleck.
(gm cc trng tn, ngh, thu nhp, m phng, tn phng, mc lng)
ENAME

JOB

ANUAL_SAL DNAME

JAMES
SMITH
ADAMS
MILLER
FORD
SCOTT

CLERK
CLERK
CLERK
CLERK
ANALYST
ANALYST

11400
9600
13200
15600
36000
36000

GRADE

SALES
RESEARCH
RESEARCH
ACCOUNTING
RESEARCH
RESEARCH

1
1
1
2
4
4

8. Hin th nhng phng khng c nhn vin no lm vic.


DEPTNO DNAME

LOC

40 OPERATIONS

BOSTON

9. Hin th m nhn vin, tn nhn vin, m ngi qun l, tn ngi qun l


EMP_NAME
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER

EMP_SAL MGR_NAME
2850
2450
2975
1250
1600
1500
950
1250
3000
800
3000
1100
1300

KING
KING
KING
BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
JONES
FORD
JONES
SCOTT
CLARK

MGR_SAL
5000
5000
5000
2850
2850
2850
2850
2850
2975
3000
2975
3000
2450
Trang 47

Oracle c bn - SQL v PL/SQL

10. Nh cu 9 hin th thm thng tin v ng KING.


EMP_NAME

EMP_SAL MGR_NAME

KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER

5000
2850
2450
2975
1250
1600
1500
950
1250
3000
800
3000
1100
1300

KING
KING
KING
BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
JONES
FORD
JONES
SCOTT
CLARK

MGR_SAL
5000
5000
5000
2850
2850
2850
2850
2850
2975
3000
2975
3000
2450

11. Hin th ngh nghip c tuyn dng vo nm 1981 v khng c tuyn dng vo
nm 1994.

12. Tm nhng nhn vin gia nhp cng ty trc gim c ca h.


13. Tm tt c cc nhn vin, ngy gia nhp cng ty, tn nhn vin, tn ngi gim c
v ngy gia nhp cng ty ca ngi gim c y.
EMP_NAME

EMP_SAL MGR_NAME

BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD
CLARK
MILLER
JONES
FORD
SMITH
SCOTT
ADAMS
13 rows selected.

2850
1250
1600
1500
950
1250
2450
1300
2975
3000
800
3300
1100

BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
CLARK
CLARK
JONES
JONES
JONES
JONES
JONES

MGR_SAL
2850
2850
2850
2850
2850
2850
2450
2450
2975
2975
2975
2975
2975

14. Tm nhng nhn vin kim c lng cao nht trong mi loi ngh nghip.
JOB

MAX(SAL)

ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN

3000
1300
2975
5000
1600

15. Tm mc lng cao nht trong mi phng ban, sp xp theo th t phng ban.
ENAME

JOB

KING

PRESIDENT

DEPTNO

SAL

10

5000
Trang 48

Oracle c bn - SQL v PL/SQL


SCOTT
BLAKE

SALEMAN
MANAGER

20
30

3300
2850

16. Tm nhn vin gia nhp vo phng ban sm nht


ENAME

HIREDATE

DEPTNO

CLARK
SMITH
ALLEN

09-06-1981
17-12-1980
20-02-1981

10
20
30

17. Hin th nhng nhn vin c mc lng ln hn lng TB ca phng ban m h lm


vic.
EMPNO ENAME
7839
7566
7902
7788
7698
7499

KING
JONES
FORD
SCOTT
BLAKE
ALLEN

SAL

DEPTNO

5000
2975
3000
3300
2850
1600

10
20
20
20
30
30

18. Hin th tn nhn vin, m nhn vin, m gim c, tn gim c, phng ban lm
vic ca gim c, mc lng ca gim c.
EMP_NUMBER EMP_NAME EMP_SAL MGR_NUMBER MGR_NAME MGR_DEPT MGR_GRADE
7698 BLAKE
7654 MARTIN
7499 ALLEN
7844 TURNER
7900 JAMES
7521 WARD
7782 CLARK
7934 MILLER
7566 JONES
7902 FORD
7369 SMITH
7788 SCOTT
7876 ADAMS
13 rows selected.

2850
1250
1600
1500
950
1250
2450
1300
2975
3000
800
3300
1100

7698
7698
7698
7698
7698
7698
7782
7782
7566
7566
7566
7566
7566

BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
CLARK
CLARK
JONES
JONES
JONES
JONES
JONES

30
30
30
30
30
30
10
10
20
20
20
20
20

4
4
4
4
4
4
4
4
4
4
4
4
4

Trang 49

Oracle c bn - SQL v PL/SQL

Chng 6. BIN RUNTIME


6.1.D LIU THAY TH TRONG CU LNH
Dng (&) ch phn thay th trong cu lnh.
Nu dng (&&) ch bin thay th th sau cu lnh bin thay th vn cn tn ti V d 1:
SELECT * FROM emp
WHERE &Condition
Enter value for condition: sal > 1000

Khi ny cu lnh trn tng ng vi:


SELECT * FROM emp
WHERE sal > 1000

V du 2:
Select ename, deptno, job
From emp
Where deptno = &&depno_please;

6.2.LNH DEFINE
Khai bo v gn tr cho cc bin, v d khai bo bin condition c gi tr 'sal

> 1000'

DEFINE condition = 'sal > 1000'

Khi cu lnh sau khng yu cu nhp vo gi tr cho codition


SELECT * FROM emp
WHERE &Condition

loi b bin ra khi b nh dng lnh UNDEFINE. V d:


UNDEFINE condition

lit k cc bin khai bo dng lnh DEFINE m khng ch bin, v d


DEFINE
DEFINE CONDITION = 'SAL > 1000'

V d:
DEFINE REM=SAL*12+NVL(COMM,0)
SELECT ENAME, JOB, &REM
FROM EKP ORDER BY & REM;

Trang 50

Oracle c bn - SQL v PL/SQL

6.3.LNH ACCEPT
Khai bo v gn tr cho bin vi dng hin th
ACCEPT variable [NUMBER/CHAR] [PROMPT/NOPROMPT 'text'] HIDE

V d:
ACCEPT Salary NUMBER PROMPT 'Salary figure: '
Salary figure : 3000

T kho hide cho php che chui nhp liu, hay dng khi nhp password.
ACCEPT password CHAR PROMPT 'Enter password: ' HIDE
Password : ***

6.4.BI TP
1. Hin th tn nhn vin, ngy gia nhp cng ty vi iu kin ngy gia nhp cng ty
nm trong khong hai bin runtime c nhp vo t bn phm (&first_date,
&last_date).
2. Hin th tn nhn vin, ngh nghip, lng, m gim c, m phng ban vi iu
kin ngh nghip bng mt bin c nhp vo t bn phm. (&job)
3. nh ngha mt bin tnh thu nhp mt nm ca nhn vin. Dng bin ny tm
nhng nhn vin c thu nhp ln hn hoc bng $30000.
4. nh ngha mt bin l khong thi gian nhn vin lm trong cng ty. Hin th tn
nhn vin v qung thi gian nhn vin lm vic vi iu kin nhn vin l mt
bin c nhp vo t bn phm.
ENAME

LENGTH OF SERVICE

KING

19 YEAR 4 MONTHS

Trang 51

Oracle c bn - SQL v PL/SQL

Chng 7. TABLE V CC LNH SQL V TABLE


7.1.LNH TO TABLE
7.1.1. C php to bng
to mt bng mi dng lnh CREATE TABLE. C
php:
CREATE TABLE tablename
(column
[datatype][DEFAULT
expr][column_constraint]..)
[PCTFREE integer][PCTUSED integer]
[INITRANS
integer][MAXTRANS
integer]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[AS subquery]

Vi:
tablename
column
[datatype]
[DEFAULT expr]
[column_constraint]
[table_constraint]
[PCTFREE integer]
[PCTUSED integer]
[INITRANS integer]
[MAXTRANS integer]
[TABLESPACE tablespace]

Tn table cn to
Tn column trong table
Kiu d liu ca column
Gi tr mc nh ca column trong trng hp
NULL l expr
Rng buc ca bn thn column
Rng buc ca ton bng
Phn trm khng gian cn trng
Phn trm khng gian s dng
S bn ghi khi to
S bn ghi ln nht
Ch nh TABLESAPCE cho bng

[STORAGE storage_clause]

[AS subquery]

Ghi mnh lu tr, n v mc nh l KB trong


cc cc chn la l: INITIAL - dung lng khi
to; NEXT - dung lng tng tip theo; MINEXTENTS
- % m rng nh nht;
MAXEXTENTS- % m rng ln nht; PCTINCREASE - Tc
tng hng nm.
To bng c cu trc ging mnh truy vn

V d 1:
CREATE TABLE EMP
EMPNO NUMBER NOT NULL CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10) CONSTRAINT NN_ENAME NOT NULL
CONSTRAINT UPPER_ENAME CHECK (ENAME=UPPER(ENAME)),
JOB VARCHAR2(9),
MGR NUMBER CONSTRAINT FK_MGR REFERENCES
SCOTT.EMP(EMPNO),
HIREDATE DATE DEFAULT SYSDATE, SAL
NUMBER(10,2) CONSTRAINT CK_SAL
CHECK(SAL>500),
COMM NUMBER(9,0) DEFAULT NULL,
DEPTNO NUMBER(2) CONSTRAINT NN_DEPTNO NOT NULL
CONSTRAINT FK_DEPTNO REFERENCES SCOTT.DEPT(DEPTNO))
PCTFREE 5 PCTUSED 75

V du 2:
CREATE TABLE SALGRADE1
Trang 52

Oracle c bn - SQL v PL/SQL


(GRADE NUMBER CONSTRAINT PK_SALGRADE PRIMARY
LOSAL NUMBER,
HISAL NUMBER)
TABLESPACE USER
STORAGE
(INITIAL
6144
NEXT
6144
MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5)

KEY,

V d 3:
CREATE TABLE DEPT10
AS
SELECT EMPNO, ENAME, JOB,
FROM EMP WHERE DEPTNO =10;

SAL

V d 4:
CREATE TABLE EMP_SAL (NAME, SALARY,GRADE)AS
SELECT ENAME, SAL, GRADE
FROM EMP, SALGARDE
WHERE EMP.SAL BETWEEN LOSAL AND HISAL ;

to mt table mi, chng ta cn phi chun b mt s thng tin sau:


Table phi c chun ha.
Nhng column m cho php null nn nh ngha sau tit kim ni lu tr. Gp cc
table li nu c th.
Ch nh cc thng s pcfree v pctused C th ch
nh 2 thng s initstran, maxtrans C th ch nh
tablespace cho table
C th c lng kch thc table, v cc thng s cho storage.

7.1.2. Tnh ton kch thc table (tham kho)


1. Tnh ton khong a cn thit cho data block header. Tnh theo
cng thc sau:
BLOCK HEADER = (FIXED HEADER + VARIABLE TRANSACTION HEADER) +
(TABLE DIRECTORY + ROW DIRECTORY)

Trong :
fixed header = 57 bytes
variable transaction header = 23*gi tr ca thng s instrans
table directory =4
row directory = 2* s lng row trong block.

2. Tnh ton khong a trng cha d liu ca data block. Tnh theo cng thc sau:
Khong a trng cha data =(block size -total block header) (block size -(fixed header+ variable transaction
header))*(pctree/100)

C th bit block size bng cch dng lnh


show parameters db_block_size.

Trang 53

Oracle c bn - SQL v PL/SQL

3. Tnh ton khong a trng kt hp bng gi tr ca mi row.


4. Tnh ton kch thc trung bnh ca row:
Kch thc trung bnh ca row = row header +A+B+C
A = Tng chiu di ca cc ct
<= 250 byte
B = Tng chiu di ca cc ct
> 250 byte
C = Khong a trng kt hp

5. Quyt nh s row trung bnh cho mt block:


avg rows /block = available space/average row size

6. Tnh ton s lng block


Block = s row / s row trung bnh cho mt block

7.2.MT S QUY TC KHI TO TABLE


7.2.1. Quy tc t tn Object
Tn di t 1 n 30 k t, ngoi tr tn CSDL khng qu 8 k t v tn lin kt c
th di n 128 k t
Tn khng cha du nhy (")
Khng phn bit ch hoa ch thng
Tn phi bt u bng k t ch trong b k t ca CSDL
Tn ch c th cha k t s trong tp k t ca CSDL. C th dng cc k t _, $, #.
Oracle khng khuyn khch dng cc k t $ v #.
Tn khng c trng vi cc t dng bi Oracle (xemphu lc 1) Tn
khng c cch khong trng
Tn c th t trong cp du nhy kp, khi tn c th bao gm cc k t bt k,
c th bao gm khong trng, c th dng cc t kha ca Oracle, phn bit ch
hoa ch thng.
Tn phi duy nht trong "khng gian tn" nht nh. Cc object thuc cng khng
gian tn phi c tn khc nhau.
Cc b danh ca ct, b danh bng, tn ngi s dng, mt khu mc d khng phi l cc object hoc cc
thnh phn con ca object nhng cng phi c t tn theo cc quy tc trn, ngoi tr
B danh ct, b danh bng ch tn ti khi thc hin cc lnh SQL v khng c lu tr trong CSDL, do vy
khng p dng quy tc 9 v khng gian tn.
Mt khu khng thuc v khng gian tn no v do cng khng p dng quy tc 9. Nn t tn
theo mt quy tc t tn thng nht

7.2.2. Quy tc khi tham chiu n Object C php chung


khi tham chiu n cc object
S chung khi tham chiu cc object hoc thnh phn ca cc object
Schema.Object.Part.@dblink

Trong :
object

Tn object

Trang 54

Oracle c bn - SQL v PL/SQL


schema
part
dblink

Schema cha object


Thnh phn ca object
Tn CSDL cha object

Oracle gii quyt vic tham chiu cc Object


Khi tham chiu n mt object trong cu lnh SQL, Oracle phn tch cu lnh v v xc nh cc object
trong khng gian tn. Sau khi xc nh cc object, Oracle thc hin cc thao tc m cu lnh quy nh trn
object. Nu tn object truy cp khng thuc khng gian tn th cu lnh khng c thc hin v c thng
bo li.
Cu

lnh

sau

thm

mt

mu

tin

vo

bng

DEPT

INSERT INTO Dept VALUES (50, 'SUPPOR', 'PARIS')

Theo ng cnh ca cu lnh, Oracle xc nh bng DEPT c th l:


Mt table trong schema ca bn
Mt view trong schema ca bn
ng ngha ring cho table hoc view
ng ngha chung cho table hoc view

Tham chiu n cc object khng thuc quyn s hu


tham chiu n cc object khng thuc schema hin thi, phi ch ra tn ca schema cha object mun
truy cp
schema.object

V d: xa table EMP trong schema SCOTT


DROP TABLE scott.emp

Tham chiu cc object t xa


truy cp n mt CSDL xa, sau tn object phi ch ra tn lin kt CSDL (database link) ca CSDL cha
object mun truy cp. Database link l mt schema object, Oracle dng thm nhp v truy xut CSDL t
xa.

7.3.Cc Kiu d liu c bn


7.3.1. Kiu CHAR
Kiu CHAR dng khai bo mt chui c chiu di c nh, khi khai bo bin hoc ct kiu CHAR vi
chiu di ch nh th tt c cc mc tin ca bin hay ct ny u c cng chiu di c ch nh. Cc mc
tin ngn hn Oracle s t ng thm vo cc khong trng cho chiu di. Oracle khng cho php gn
mc tin di hn chiu di ch nh i vi kiu CHAR. Chiu di ti a cho php ca kiu CHAR l 255 byte

7.3.2. Kiu VARCHAR2


Kiu VARCHAR2 dng khai bo chui k t vi chiu di thay i. Khi khai bo mt bin hoc ct kiu
VARCHAR2 phi ch ra chiu di ti a, cc mc tin cha trong bin hay ct kiu VARCHAR2 c chiu di
thc s l chiu di ca mc tin. Oracle khng cho php gn

Trang 55

Oracle c bn - SQL v PL/SQL

mc tin di hn chiu di ti a ch nh i vi kiu VARCHAR2. Chiu di ti a kiu VARCHAR2 l 2000


byte.

7.3.3. Kiu VARCHAR


Hin ti Oracle xem kiu VARCHAR2 v VARCHAR l nh nhau, tuy nhin Oracle khuyn nn
dng VARCHAR2. Oracle d nh trong tng lai dng kiu VARCHAR cha cc chui vi
chiu di bin i, nhng trong php so snh s c ch nh theo nhiu ng ngha khc
nhau.

7.3.4. Kiu NUMBER


Kiu s ca Oracle dng cha cc mc tin dng s dng, s m, s vi du chm ng.
NUMBER(p, s)
p
S ch s trc du chm thp phn (precision), p t 1
n 38 ch s
s
S cc ch s tnh t du chm thp phn v bn phi
(scale), s t -84 n 127

NUMBER(p) S c du chm thp phn c nh vi precision bng p v


scale bng 0

NUMBER

S vi du chm ng vi precision bng 38. Nh rng


scale khng c p dng cho s vi du chm ng.

V d sau cho thy cch thc Oracle lu tr d liu kiu s ty theo cch nh precision v
scale khc nhau.
D liu thc
7456123.89
7456123.89
7456123.89
7456123.89
7456123.89
7456123.8
7456123.89
7456123.89

Kiu
NUMBER
NUMBER(9)
NUMBER(9,2)
NUMBER(9,1)
NUMBER(6)
NUMBER(15,1)
NUMBER(7,-2)
NUMBER(-7,2)

Gi tr lu tr
7456123.89
7456123
7456123.89
7456123.8
Khng hp l
7456123.8
7456100
Khng hp l

7.3.5. Kiu FLOAT


Dng khai bo kiu s du chm ng, vi chnh xc thp phn 38 hay chnh xc nh phn l 126.
FLOAT(b) Khai bo kiu du chm ng vi chnh xc nh phn l b, b t 1 n 126. C th chuyn t
chnh xc nh phn sang chnh xc thp phn bng cch nhn chnh xc nh phn vi 0.30103

7.3.6. Kiu LONG


Dng khai bo kiu chui k t vi di bin i, chiu di ti a ca kiu LONG l 2 gigabyte. Kiu
LONG thng c dng cha cc vn bn.
C mt s hn ch khi dng kiu LONG
Trang 56

Oracle c bn - SQL v PL/SQL

Mt table khng th cha nhiu hn mt ct kiu LONG


D liu kiu LONG khng th tham gia vo cc rng buc ton vn, ngoi tr kim tra
NULL v khc NULL
Khng th index mt ct kiu LONG
Khng th truyn tham s kiu LONG cho hm hoc th tc Cc
hm khng th tr v d liu kiu LONG
Trong cu lnh SQL c truy cp cc ct kiu LONG, th vic cp nht hoc kha cc
bng ch cho php trong cng mt CSDL

Ngoi ra, cc ct kiu LONG khng c tham gia trong cc thnh phn sau ca cu lnh
SQL
Cc mnh WHERE, GROUP BY, ORDER BY, CONNECT BY hoc vi tc t
DISTINCT trong cu lnh SELECT
Cc hm s dng trong cu lnh SQL nh SUBSTR, INSTR
Trong danh sch la chn ca cu lnh SELECT c s dng mnh GROUP BY Trong danh
sch la chn ca cu hi con, cu hi c s dng cc ton t tp hp Trong danh sch la chn
ca cu lnh CREATE TABLE AS SELECT

7.3.7. Kiu DATE


Dng cha d liu ngy v thi gian. Mc d kiu ngy v thi gian c th c cha trong kiu CHAR
v NUMBER.
Vi gi tr kiu DATE, nhng thng tin c lu tr gm th k, nm, thng, ngy, gi, pht, giy. Oracle
khng cho php gn gi tr kiu ngy trc tip, gn gi tr kiu ngy, bn phi dng TO_DATE chuyn
gi tr kiu chui k t hoc kiu s.
Nu gn mt gi tr kiu ngy m khng ch thi gian th thi gian mc nh l 12 gi m, Nu gn gi tr
kiu ngy m khng ch ra ngy, th ngy mc nh l ngy u ca thng. Hm SYSDATE cho bit ngy v
thi gian h thng.
Tnh ton i vi kiu ngy
i vi d liu kiu ngy, bn c th thc hin cc php ton cng v tr. V d:
SYSDATE+1 ngy hm sau
SYSDATE-7 cch y mt tun
SYSDATE+(10/1440) mi pht sau

Ngy Julian: L gi tr s cho bit s ngy k t ngy 1 thng ging nm 4712 trc cng nguyn.
V d:
SELECT TO_CHAR (TO_DATE('01-01-1992', 'MM-DD-YYYY'), 'J') JULIAN
FROM DUAL;

Kt qu:
JULIAN
2448623

Trang 57

Oracle c bn - SQL v PL/SQL

7.3.8. Kiu RAW v kiu LONG RAW


Kiu RAW v LONG RAW dng cha cc chui byte, cc d liu nh phn nh hnh nh, m thanh. Cc d
liu kiu RAW ch c th gn hoc truy cp ch khng c thc hin cc thao tc nh i vi chui k t.
Kiu RAW ging nh kiu VARCHAR2 v kiu LONG RAW ging kiu LONG, ch khc nhau ch Oracle t
ng chuyn i cc gi tr kiu CHAR, VARCHAR2 v LONG gia tp hp k t ca CSDL v tp k t ca
cc ng dng.

7.3.9. Kiu ROWID


Mi mu tin trong CSDL c mt a ch c kiu ROWID. ROWID bao gm cc thnh phn:
block.row.file.

Vi
block
row
file

Chui h hexa cho bit block cha row


Chui h hexa cho bit row trong block
Chui h hexa cho bit database file cha block

V d:
0000000F.0000.0002

Row u tin trong block 15 ca data file th hai.

7.3.10. Kiu MLSLABEL


Kiu MLSLABEL dng cha label dng nh phn m Oracle dng m bo hot ng ca bn thn h
thng.

7.3.11. Chuyn i kiu


Chuyn i mc nh
Ni chung mt biu thc khng th gm cc gi tr thuc nhiu kiu khc nhau, tuy nhin Oracle cho php
chuyn i gi cc kiu d liu. Oracle t ng chuyn kiu ca d liu trong mt s trng hp sau
Khi INSERT hoc UPDATE gn gi tr cho ct c kiu khc, Oracle s t ng chuyn
gi tr sang kiu ca ct.
Khi s dng cc hm hoc cc ton t m cc tham s c kiu khng tng thch th
Oracle s t ng chuyn kiu.
Khi s dng ton t so snh m cc gi tr c cc kiu khc nhau, Oracle s t ng
chuyn kiu.

V d 1:
SELECT ename FROM emp WHERE hiredate = '12-MAR-1993'

Oracle t ng chuyn chui '12-MAR-1993' sang kiu DATE trong php so snh
V d 2:
SELECT ename FROM emp WHERE ROWID = '00002514.0001.0001'

Trang 58

Oracle c bn - SQL v PL/SQL

Oracle t ng chuyn chui '00002514.0001.0001' sang kiu ROWID trong php so


snh

Ngi s dng t chuyn i


Oracle cung cp cc hm chuyn i kiu, v d
TO_NUMBER
TO_CHAR
TO_DATE

Chuyn sang kiu s


Chuyn sang kiu k t
Chuyn sang kiu ngy

(xem phn tra cu cc hm v th tc)

7.4.RNG BUC D LIU TRONG TABLE


Cc dng constraint gm:
NULL/NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY (Referential Key)
CHECK

7.4.1. NULL/NOT NULL


L rng buc column trng hoc khng trng.
V d mnh rng buc:
CREATE TABLE DEPT (
DEPTNO
NUMBER(2) NOT NULL,
DNAME
CHAR(14),
LOC
CHAR(13),
CONSTRAINT DEPT_PRIMARY_KEY PRIMARY KEY (DEPTNO));

7.4.2. UNIQUE
Ch ra rng buc duy nht, cc gi tr ca column ch trong mnh UNIQUE trong cc row
ca table phi c gi tr khc bit. Gi tr null l cho php nu UNIQUE da trn mt ct.
V d:
CREATE TABLE DEPT (
DEPTNO
NUMBER(2),
DNAME
CHAR(14),
LOC
CHAR(13),
CONSTRAINT UNQ_DEPT_LOC UNIQUE(DNAME, LOC));

7.4.3. PRIMARY KEY


Ch ra rng buc duy nht (ging UNIQUE), tuy nhin kho l dng kho UNIQUE cp cao
nht. Mt table ch c th c mt PRIMARY KEY. Cc gi tr trong PRIMARY KEY phi NOT
NULL.

Trang 59

Oracle c bn - SQL v PL/SQL


C php khi t CONSTRAINT mc TABLE
[CONSTRAINT constraint_name] PRIMARY KEY (column,
Column..)
C php khi t CONSTRAINT mc COLUMN
[CONSTRAINT constraint_name] PRIMARY KEY

7.4.4. FOREIGN KEY ( Referential )


Ch ra mi lin h rng buc tham chiu gia table ny vi table khc, hoc trong chnh 1 table. N ch ra
mi lin h cha-con v ch rng buc gia FOREIGN KEY bng ny vi PRIMARY KEY hoc UNIQUE
Key ca bng khc. V d quan h gia DEPT v EMP thng qua trng DEPTNO.
T kho ON DELETE CASCADE c h nh trong dng kho ny ch khi d liu cha b xo (trong
bng DEPT) th d liu con cng t ng b xo theo (trong bng EMP).

7.4.5. CHECK
Rng buc kim tra gi tr.
V d:
CREATE TABLE EMP
(EMPNO NUMBER NOT NULL CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10) CONSTRAINT NN_ENAME NOT NULL
CONSTRAINT UPPER_ENAME CHECK (ENAME =
UPPER(ENAME)),
JOB VARCHAR2(9),
MGR NUMBER CONSTRAINT FK_MGR REFERENCES
SCOTT.EMP(EMPNO),
HIREDATE DATE DEFAULT SYSDATE, SAL
NUMBER(10,2) CONSTRAINT CK_SAL
CHECK(SAL>500),
COMM NUMBER(9,0) DEFAULT NULL,
DEPTNO NUMBER(2) CONSTRAINT NN_DEPTNO NOT NULL
CONSTRAINT FK_DEPTNO REFERENCES SCOTT.DEPT(DEPTNO);

7.5.LNH DDL CAN THIP TI TABLE


7.5.1. Chnh sa cu trc table
Dng lnh ALTER TABLE chnh sa cu trc bng. C
php:
ALTER TABLE tablename [ADD/MODIFY/DROP options
([column [column constraint) [ENABLE clause]
[DISABLE clause]

Trong :
ADD
MODIFY
DROP
ENABLE/DISABLE

Thm column hay constraint.


Sa i kiu cc column
B constraint.
Che khut hoc a vo s dng cc CONSTRAINT m
khng xa hn

Ch :

Trang 60

Oracle c bn - SQL v PL/SQL

Kh dng mnh MODIFY khng th chuyn tnh cht ca COLUMN c ni dung l


NULL chuyn thnh NOT NULL;
Khng th a thm mt ct NOT NUL nu table c s liu. Phi thm ct NULL,
in y s liu, sau chuyn thnh NOT NULL.
Khng th chuyn i kiu khc nhau nu column cha s liu Khng th dng mnh
MODIFY nh ngha cc CONSTRAINT tr rng buc
NULL/NOT NULL. Mun sa CONSTRAINT cn xo chng sau ADD thm vo.
V d 1:
ALTER TABLE emp ADD (spouse_name CHAR(10);

V d 2:
ALTER TABLE emp MODIFY (ename CHAR(25);

V d 3:
ALTER TABLE emp DROP CONSTRAINT
ALTER TABLE DROP PRIMARY KEY;

emp_mgr;

V d 4:
ALTER TABLE dept DISABLE CONSTRAINT dept_prim;

7.5.2. Cc lnh DDL khc


Xa table
Dng lnh DROP TABLE xo bng.
C php:
DROP TABLE table_name [CASCADE CONSTRAINTS]

Trong :
CASCADE CONSTRAINTS

xa tt c cc rng buc ton vn lin quan


n table b xa.

V d:
DROP TALE emp

Khi drop table th:


Xa tt c d liu
View v synonymlin quan vn cn nhng khng c gi tr Cc
giao dch cha gii quyt xong s c commit Ch ngi to ra table
hay DBA mi c th xa table

7.5.3. Ch dn cho table


Dng lnh COMMENT ch thch.
V d:

Trang 61

Oracle c bn - SQL v PL/SQL


COMMENT ON TABLE EMP IS THONG TIN NHAN VIEN;
COMMENT ON COLUMN EMP.EMPNO IS MA SO NHAN VIEN;

7.5.4. Thay i tn object


Dng lnh RENAME thay i tn object.
C php:
RENAME old TO new

Trong :
old
new

Tn c
Tn mi

V d:
RENAME emp TO employee

7.5.5. Xa d liu ca table


Dng lnh TRUNCATE TABLE xa d liu ca table, xa tt c cc row trong table. C php:
TRUNCATE TABLE table_name [REUSE STORAGE]

Trong :
REUSE STORAGE

gi li khung cha, ch xa d liu

7.6.THNG TIN V TABLE TRONG T IN D LIU


Trung tm ca c s d liu Oracle l data dictionary. Data dictionary t ng c to ra khi c s d liu
Oracle c to. Oracle cp nht ln data dictionary bng cc lnh DDL (Data Define Language). Cc table
ca t in d liu c to ra bng lnh CREATE DATABASE v ch c to t user SYS. Cc view trong
t in d liu chc cc thng tin di dng d nhn hn bng.
C cc dng view l:
USER_xxx: l nhng i tng thuc user. V d cc bng c to bi user
ALL_xxx: l tt c cc i tng m user c quyn truy nhp
DBA_xxx: tt c cc i tng trong database
V$: Cc thc thi ca Server.

Ngoi ra cn c cc view quan trng khc l:


DICTIONARY: Thng tin v ton b cc table, view, snapshot trong t in d liu
TABLE_PRIVILEGES: Thng tin v vic gn quyn trn cc i tng IND: ng ngha
ca USER_INDEX.
Mun hin th ton b thng tin v cc table, view, snapshot trong t in d liu dng lnh
SELECT * FROM DICTIONARY;

Trang 62

Oracle c bn - SQL v PL/SQL

Hin th cu ca USER_OBJECT
DESCRIBE USER_OBJECT;

Hin th tt c cc bng m user s hu:


SELECT OBJECT_NAME
FROM USER_OBJECT
WHERE OBJECT_TYPE = TABLE;
SELECT * FROM TAB;
SELECT TABLE_NAME FROM USER_TABLE;

Hin th tt c cc loi i tng trong t in d liu:


SELECT DISTINCT OBJECT_TYPE
FROM USER_OBJECTS;

7.7.BI TP
1. To bng PROJECT vi cc column c ch ra di y, PROJID l promary key, v
P_END_DATE > P_START_DATE.
Column name

Data Type Size.

PROJID
P_DESC
P_START_DATE
P_END_DATE
BUDGET_AMOUNT
MAX_NO_STAFF

NUMBER
VARCHAR2
DATE
DATE
NUMBER
NUMBER

4
20
7,2
2

2. To bng ASSIGNMENTS vi cc column c ch ra di y, ng thi ct


PROJID l foreign key ti bng PROJECT, ct EMPNO l foreign key ti bng EMP.
Column name

Data Type Size.

PROJID
EMPNO
A_START_DATE
A_END_DATE
BILL_AMOUNT
ASSIGN_TYPE

NUMBER
NUMBER
DATE
DATE
NUMBER
VARCHAR2

4
4

NOT NULL
NOT NULL

4,2
2

3. Thm column COMMENTS kiu LONG vo bng PROJECTS. Thm column HOURS kiu
NUMBER vo bng ASSIGNMENTS.
4. S dng view USER_OBJECTS hin th tt c cc i tng user s hu.
5. Thm rng buc duy nht (UNIQUE) cho 2 column PROJECT_ID v EMPNO ca bng
ASSIGNMENTS.
6. Xem cc thng tin v cc rng buc trong USER_CONSTRAINTS.
7. Xem trong USER hin ti c tt c bao nhiu bng.
Trang 63

Oracle c bn - SQL v PL/SQL

Chng 8. CC LNH THAO TC D LIU


8.1.THAO TC D LIU TRONG TABLE
8.1.1. Thm mi dng d liu
chn mt row vo table dng lnh INSERT. C
php:
INSERT INTO tablename ([column,
VALUES (value, value ...);

column,

...])

V d:
INSERT INTO dept (depno, dname, loc)
VALUES (50, 'MARKETING', 'SAN JOSE')

Chp d liu t table khc


INSERT INTO table [(column, column...)]
SELECT select_list
FROM table(s)

V d:
INSERT INTO emp_tmp (ename, sal)
SELECT ename, sal FROM emp WHERE sal > 1000

Bt u t phin bn Oracle 9i, ta c th thm mi dng d liu v t gi tr mc nh thng qua t kho


DEFALT
V d:
INSERT INTO EMP (EMPNO, ENAME, DEPTNO)
VALUES (8000,MIKE,DEFAULT);

Oracle 9i cn cho php thc hin lnh INSERT trn ng thi nhiu table khc nhau, ch s dng mt cu
lnh DML.
V d:
Lnh INSERT khng iu kin (UNCONDITIONAL)
INSERT ALL
INTO T1 (C1, C2, ...) VALUES (C1, C2, ...)
INTO T2 (C1, C2, ...) VALUES (C1, C2, ...)
SELECT C1, C2, ... FROM T9;
Lnh INSERT khng iu kin (CONDITIONAL)
INSERT [ALL|FIRST]
WHEN c1 = 1 THEN INTO T1 (C1, C2, ...) VALUES (C1, C2, ...)
WHEN c1 = 2 THEN INTO T2 (C1, C2, ...) VALUES (C1, C2, ...)
WHEN c2 = 3 THEN INTO T3 (C1, C2, ...) VALUES (C1, C2, ...)
SELECT C1, C2, ... FROM T9;
Trang 64

Oracle c bn - SQL v PL/SQL

FIRST: insert cho cu lnh u tin c gi tr iu kin ng


ALL: insert cho mi cu lnh c gi tr iu kin l ng

8.1.2. Cp nht dng d liu


chnh sa d liu dng lnh UPDATE.
C php:
UPDATE table [alias]
SET column [,column...]
[WHERE condition]

[expr,

subquery]

V d 1:
UPDATE emp
SET job = 'SALEMAN', hiredate = sysdate, sal = sal * 1.1
WHERE ename = 'SCOTT';

V d 2:
UPDATE emp
SET comm = (SELECT comm FROM commission C
WHERE C.empno = emp.empno)
WHERE empno IN (SELECT empno FROM commission);

V d 3:
UPDATE emp a
SET deptno =
(SELECT deptno FROM dept
WHERE loc = 'BOSTON'),
(sal, comm) = (SELECT
1.1*AVG(sal),1.5*AVG(comm)
FROM emp b
WHERE a.deptno = b.deptno)
WHERE deptno IN
(SELECT deptno FROM dept
WHERE loc = 'DALLAS' OR loc = 'DETROIT');

Ta cng c th s dng mnh DEFAULT trong cu lnh cp nht d liu V d:


UPDATE EMP SET COMM = DEFAULT;
Ch thch:
- Cp nht cc nhn vin Dallas hoc Detroit
- Thay DEPTNO ca cc nhn vin ny bng DEPTNO ca Boston - Thay lng
mi nhn vin bng lng trung bnh ca b phn * 1.1 - Thay commission ca
mi nhn vin bng commission trung bnh ca b
phn * 1.5

8.1.3. Lnh Merge


Lnh MERGE l mt c im rt hay ca Oracle 9i. N cn c gi l lnh UPSERT, tc l c kh nng
va thc hin vic Update, va thc hin lnh Insert tu vo bn ghi ch c tn ti hay khng.
C php:
MERGE INTO T1

Trang 65

Oracle c bn - SQL v PL/SQL

USING T2 ON (T1.C9=T2.C9)
WHEN MATCHED THEN UPDATE SET T1.C1=T2.C2, T1.C2=T2.C2 ...
WHEN NOT MATCHED THEN INSERT (C1,C2, ...) VALUES (C1,C2,
...);

8.1.4. Xa dng d liu


xa dng dng lnh DELETE.
C php:
DELETE FROM table [WHERE condition]

V d:
DELETE FROM emp
WHERE deptno = 10;

8.1.5. Li rng buc d liu


Thng thng khi thc hin cc lnh thao tc d liu hay gp phi cc li rng buc ton vn d liu. Cc
li ny xut hin khi c cc rng buc trc m d liu nhp vo, chnh sa hay khi xo i khng m
bo cc iu kin ton vn. M li: ORA_02292: INTEGRITY CONSTRAINT. Sau bo tn ca
Constraint b li.

8.2.LNH IU KHIN GIAO DCH


Mt cu lnh SQL c th gm
Lnh DML thao tc d liu
Lnh DDL nh ngha d liu
Lnh DCL iu khin truy nhp d liu
Mt giao dch bt u khi mt lnh SQL c thc hin Mt giao
dch kt thc mt trong cc trng hp sau:
COMMIT hoc ROLLBACK
Cc lnh DDL v DCL thc hin (t ng commit) Li,
thot khi SQL*Plus, h thng b down.

C php:
Kt thc giao dch hin ti, thc hin cc chuyn i d liu
COMMIT

Xc nh im savepoint ca giao dch


SAVEPOINT name

Quay li d liu im SAVEPOINT hoc ton b giao dch.


ROLLBACK [TO SAVEPOINT name]

Trang 66

Oracle c bn - SQL v PL/SQL

T ng COMMIT khi thc hin cc lnh Insert, update, delete.


SET AUTO[COMMIT] ON/OFF

V d:
INSERT INTO DEPT
VALUES (50,TESTING,LAS VEGAS);
SAVEPOINT INSERT_DONE;
UPDATE DEPT
SET DNAME = MARKETING;
ROLLBACK TO INSERT_DONE ;
UPDATE DEPT SET DNAME
WHERE DNAME =SALES;

MARKETING

COMMIT;

8.3.BI TP
1. Thm d liu vo bng PROJECTS.
PROJID
P_DESC
P_START_DATE
P_END_DATE
BUDGET_AMOUNT
MAX_NO_STAFF

1
WRITE C030 COURSE
02-JAN-88
07-JAN-88
500
1

2
PROOF READ NOTES
01-JAN-89
10-JAN-89
600
1

2. Thm d liu vo bng ASSIGNMENTS.


PROJID
EMPNO
A_START_DATE
A_END_DATE
BILL_RATE
ASSIGN_TYPE
HOURS

1
7369
01-JAN-88
03-JAN-88
50.00
WR
15

1
7902
04-JAN-88
07-JAN-88
55.00
WR
20

2
7844
01-JAN-89
10-JAN-89
45.50
PF
30

3. Cp nht trng ASIGNMENT_TYPE t WT thnh WR.


4. Nhp thm s liu vo bng ASSIGNMENTS.

Trang 67

Oracle c bn - SQL v PL/SQL

Chng 9. SEQUENCE V INDEX


9.1.SEQUENCE
9.1.1. To Sequence
Sequence l danh sch tun t ca con s, v c to bi Oracle sever. Sequence dng to kha chnh
mt cch t ng cho d lu.
Sequence thng dng to kha chnh trong sinh m t ng. C th dng chung cho nhiu i tng.
Con s sequence ny c chiu di ti a l 38 s.
to sequence, dng lnh CREATE SEQUENCE
C php:
CREATE SEQUENCE sequence_name
INCREMENT BY integer
START WITH integer
[MAXVALUE integer]
[MINVALUE integer]
[CYCLE/NO CYCLE];

Vi:
INCREMENT BY
START WITH
MAXVALUE
MINVALUE
CYCLE/NO CYCLE

Ch
Ch
Gi
Gi
Dy
Mc

nh khong cch ca
nh s u tin ca
tr ln nht ca dy
tr nh nht ca dy
tun t c quay vng
nh l NO CYCLE

dy s tun t
dy s tun t
tun t
tun t
khi n im cui.

V d:
CREATE SEQUENCE sample_sequence
INCREMENT 1
STRAT WITH 2
MAXVALUE 100;

lm vic vi cc sequence, dng lnh SQL vi cc ct gi sau


CURRVAL
NEXTVAL

Cho gi tri hin thi ca sequence


Tng gi tri hin thi ca sequence v cho
gi tr sau khi tng phi xc nh tn
sequence trc currval v nextval

sequence.CURRVAL
sequence.NEXTVAL

truy cp cc sequence khng thuc schema hin thi, th phi ch ra tn schema


schema.sequence.CURRVAL
schema.sequence.NEXTVAL

truy cp cc sequence t xa, th cn phi ch ra datalink


schema.sequence.CURRVAL@dblink
schema.sequence.NEXTVAL@dblink

Trang 68

Oracle c bn - SQL v PL/SQL

S dng sequence
CURRVAL v NEXTVAL c th c s dng trong cc trng hp sau:
Trong danh sch la chn ca cu lnh SELECT
Trong mnh VALUES ca cu lnh INSERT
Trong mnh SET ca cu lnh UPDATE
Khng c s dng CURRVAL v NEXTVAL trong cc trng hp sau Trong
cu hi con
Trong cc view v snapshot
Trong cu lnh SELECT c tc t DISTINCT
Trong cu lnh SELECT c s dng GROUP BY hay ORDER BY
Trong cu lnh SELECT c s dng cc php ton tp hp nh UNION,
INTERSET, MINUS
Trong mnh WHERE ca cu lnh SELECT
Ga tr DEFAULT ca ct trong cu lnh CREATE TABLE hay ALTER TABLE
Trong iu kin ca rng buc CHECK

9.1.2. Thay i v hu sequence


Thay i sequence:
ALTER SEQUENCE sequence_name
INCREMENT BY integer
START WITH integer
[MAXVALUE integer]
[MINVALUE integer]
[CYCLE/NO CYCLE];

Hu sequence:
DROP SEQUENCE sequence_name ;

9.2.INDEX
9.2.1. To index
Index l mt cu trc c s d liu, c sever s dng tm mt row trong bng mt
cch nhanh chng. Index bao gm mt key value (mt ct (column) trong hng (row)) v
ROWID.
C php:
CREATE [UNIQUE]] INDEX index_name
ON TABLE ( column [,column...]);

9.2.2. S dng index


Ta s dng index trong mt s trng hp sau:
Dng index query cho nhanh.
Dng Index khi m vic ly d liu <15% s row trong bng. Index
nhng column no dng ni gia cc bng ln nhau. Khng nn dng
Index cho cc bng no ch c vi row.
Primaryv unique key ( kha chnh v kha duy nht) t ng c index, nhng nn
c index cho foreign key( kha ngoi).
Trang 69

Oracle c bn - SQL v PL/SQL

S lng index cho mt table l khng gii hn. Tuy nhin nu c qu nhiu index s gy nh hng n s
liu khi m d liu trong table b thay i th t theo index. V d: Thm mt row vo bng tt c cc Index
s c update. Nn chn la gia yu cu query, v insert, update c mt index hp l. i vi cc kho
PRIMARY KEY v UNIQUE KEY t kho UNIQUE c t ng thm khi to INDEX.
V d:
CREATE INDEX i-ENAME ON EMP (ENAME);

Xo INDEX bng lnh:


DROP INDEX index_name ;

9.3.BI TP
1. To Index trn ct PROJID cho bng ASSIGNMENT.
2. Hin th danh sch ca nhn vin thuc s qun l ca ngi c tn l 1 bin c
nhp t bn phm
EMPNO ENAME JOB
7698
7654
7499
7844
7900
7521

MGR HIREDATE

BLAKE MANAGER
7839 01-05-1981
MARTIN SALESMAN 7698 28-09-1981
ALLEN SALESMAN 7698 20-02-1981
TURNER SALESMAN 7698 08-09-1981
JAMES CLERK
7698 03-12-1981
WARD
SALESMAN 7698 22-02-1981

SAL COMM
2850
1250
1600
1500
950
1250

1400
300
0
500

DEPTNO
30
30
30
30
30
30

Trang 70

Oracle c bn - SQL v PL/SQL

Chng 10. VIEWS


10.1.VIEWS
10.1.1. To view
View l mt table logic, view khng phi l ni lu tr d liu mc vt l. Cc thnh phn ca view da
trn table hoc l trn view khc. Mi tc ng ln view u gy nh hng ti table ca view , v ngc
li. nh ngha mt view dng query trn mt bng hay mt view no .
C php:
CREATE [OR REPLACE] [FORCE] VIEW view_name [(column, column,...)]
AS
SELECT statement
[WITH CHECK OPTION [CONSTRAINT constraint_name]];

Trong :
OR REPLACE
FORCE
column, column
WITH CHECK OPTION

CONSTRAINT

to view chn ln view cng tn


to view c khi table hay view no
khng tn ti trong cu lnh SELECT.
Tn cc column ca view
Nu c lnh insert hoc update ln vie, ql
s kim tra iu kin ph hp trong mnh where
ca view. Nu khng d liu s ch kim tra cc
rng buc ton vn ca bng.
Ch ra tn ca iu kin kim tra.

V d 1:
CREATE VIEW emp_view
AS
SELECT empno, ename, sal FROM emp WHERE deptno = 10;

V d 2:
CREATE VIEW dept_summary
(name, minsal, maxsal, avsal)
AS
SELECT dname, min(sal), max(sal), avg(sal) FROM emp, dept
FROM emp, dept
WHERE emp.deptno = dept.deptno
GROUP BY dname;

V d 3:
CREATE VIEW dept_view
AS
SELECT eame, sal*12 Annsal
FROM emp
WHERE deptno = 20
WITH CHECK OPTIION CONSTRAINT dept_check;

10.1.2. Xa cc view
Ch nhng ngi to view mi c quyn DROP
Trang 71

Oracle c bn - SQL v PL/SQL


DROP VIEW dept_view;

View c th thc hin cc lnh SQL sau:


SELECT
INSERT (insert trn view cng nh hng ln table)
Update (nh hng ln table)
Comment

Tuy nhin c nhng rng buc sau:


Khng th insert, update trn view, khi query ca view cha cc ton t join, set,
distinct, group by, group.
Khng th no insert, update trn view, nu nh trong view c dng with check
option.
Khng th no insert trn view, trn table c nhng ct not Null m khng dng
default value ( bi v trong trng hp ny view s c t colunm hn table table.
Nn insert 1 row vo view, thc cht l insert row vo table s khng hp l).
Khng th no insert trn view, nu view ny c dng biu thc decode.
Nhng query ca view khng th no tham kho vo 2 column gi nextval, currval
(nextval, currval dng cho sequence).

10.2.BI TP
1. To view c hin th nh sau:
select * from aggredates;
DEPTNO

AVERAGE MAXIMUN

10 2916.66667
20
2235
30 1566.66667

MINIMUN

SUM

1300
800
950

8750
11175
9400

5000
3300
2850

NO_SALS NO_COMMS
3
5
6

0
0
4

2. To view nhp s liu vo bng ASIGNMENT vi cc iu kin sau:


PROJID <2000, P_START_DATE<P_END_DATE

Cc gi tr c th chp nhn ca assign_type l PS, WT hoc ED


EMPNO c gi tr NOT NULL
BILL_RATE < 50 Vi ASSIGN_TYPE L PS
BILL_RATE < 60 Vi ASSIGN_TYPE L WT
BILL_RATE < 70 Vi ASSIGN_TYPE L ED

3. nh ngha bng MESSAGES c cu trc


Column name Data Type
NUMCOL1
NUMCOL2
CHARCOL1
CHARCOL2
DATECOL1
DATECOL2

NUMBER(9,2)
NUMBER(9,2)
VARCHAR2(60)
VARCHAR2(60)
DATE
DATE

Trang 72

Oracle c bn - SQL v PL/SQL

Chng 11. QUYN V BO MT


11.1.QUYN - PRIVILEGE
Privileges l cc quyn hn c thc hin cc thao tc hoc thc hin vic truy nhp n cc i tng d
liu. Trong Oracle bn s khng th thc hin c cc thao tc m khng c cc quyn tng ng. Cc
quyn hn ny c gn cho User c th thc hin cc thao tc trn cc i tng ch nh. Vic gn
quyn c thc hin bi ngi qun tr c s d liu.
Gn quyn hoc loi b: thc hin gn quyn cho mt i tng dng lnh Grant loi b quyn hn dng
Revoke (hoc bng cc cng c h tr khc nh Oracle Enterprise manager)
Cc quyn bao gm:
Bo mt CSDL
Bo mt h thng
Bo mt d liu
Quyn h thng: Quyn truy nhp v CSDL
Quyn trn i tng: Thao tc ni dung ca cc i tng CSDL Schema
l tp howpjc c i tng nh tables, view...
CSDL: Khi ci t xong h qun tr CSDL Oracle mc nh c 2 user.
SYS: C quyn cao nht. Mt khu l change_on_install
SYSTEM: C quyn thp hn SYS. Mt khu l MANAGER

Quyn h thng
Trong cc quyn h thng quyn DBA l ln nht. DBA c quyn
CREATE USER : To user mi
DROP USER :Xo user
DROP ANY TABLE :Xo table
BACKUP ANY TABLE :To cc backup table.

Lnh to user ca ngi c quyn DBA nh sau:


CREATE USER user_name
IDENTIFY BY password;

Quyn trn i tng:


CREATE SESION: Truy nhp vo CSDL
CREATE TABLE: to bng trong user
CREATE SEQUENCE: To sequence
CREATE VIEW: To view
CREATE PROCEDURE: To procedure

Gn quyn
Trang 73

Oracle c bn - SQL v PL/SQL


GRANT privilege[,privilege...] TO user [,user...]

Xo quyn
REVOKE privilege[,privilege...] FROM user [,user...]

11.2.ROLE
Role l tn ca mt nhm cc quyn hn. N c to qun l quyn hn cho cc ng dng hoc nhm
cc User. Vic dng role cho php qun l thng nht trn cc i tng, tng tnh mm do trong qun tr,
d dng thay i. V d hai i tng X, Y c quyn trn role A tc l role A c quyn g th X, Y c quyn
tng ng khi role A b thay i quyn hn th X, Y cng b thay i quyn hn theo.

Lnh to Role
C php:
CREATE ROLE role [IDENTIFY BY password];

Gn privilege cho Role


Gn Role c cc i tng
Mt s Role hay dng:
CONNECT
RESOURCE
Lnh gn v xo Role ging nh lnh gn v xo Privilege. Chi tit xem trong phn qun tr Oracle.

11.3.SYNONYM
Synonyms l b danh cho mi i tng ca Oracle. Cc i tng ca Oracle l table, view, snapshot,
sequence, procedure, function, package v cc synonym khc. C php
CREATE PUBLIC SYNONYM synonym_name
FROM [OWNER.]object_name;

Dng Synonyms c nhng li im sau:


Khng tn thm ni lu tr khc bi v n c ct trn t in d liu. Lm n
gin on chng trnh SQL.
Tng tnh bo mt cho database.
C th cho php mi ngi (public) truy xut cc i tng ca Oracle.

V d: Chng ta c mt table EMPLY trong schema emp_01


Khi lp trnh th phi truy xut theo emp_01. EMPLY, tn di nh vy th on chng trnh s di s d lm
ln. Nn chng ta phi dng synonym
CREATE SYNONYM EMP FOR EMP_01.EMPLY;

Trang 74

Oracle c bn - SQL v PL/SQL

C th to mt synonym cho php mi ngi c th tham kho ti


CREATE PUBLIC EMP FOR EMP_01.EMPLY;

Tnh bo mt l v synonym l b danh, nn ngi s dng dng b danh ny s khng on c thm thng
tin g.

Trang 75

Oracle c bn - SQL v PL/SQL

Chng 12. GII THIU NGN NG PL/SQL


12.1.TNG QUAN V PL/SQL
12.1.1. C php lnh PL/SQL
Mi lnh SQL kt thc bng du (;)
Lnh nh ngha CSDL (DDL) khng c s dng trong PL/SQL
Lnh SELECT tr v nhiu dng c th gy exception
Lnh DML c th tc ng trn nhiu dng
V d:
x := 1;
INSERT INTO
emp (id, name)
VALUES (50, GARNOR);
BEGIN
SELECT name FROM dept INTO :DEPT.NAME;
EXCEPTION
WHEN others THEN
Message(SQLERRM);
END;
UPDATE emp
SET sal := sal*1.2
WHERE dept_id = 10;

12.1.2. Khi lnh PL/SQL


Ngn ng PL/SQL t chc cc lnh theo tng khi lnh. Mt khi lnh PL/SQL cng c th c cc khi
lnh con khc trong n.
Cu trc y ca mt khi lnh PL/SQL bao gm:
DECLARE /* Phn khai bo - Khng bt buc */
Khai bo cc bin s dng trong phn thn
BEGIN /* Phn thn */
on lnh thc hin;
EXCEPTION /* Phn x l li - Khng bt buc */
X l li xy ra;
END;

V d1:
DECLARE
empno

NUMBER(4):=7788;

BEGIN
UPDATE emp
SET sal = 9000
WHERE empno = 0001;
END;

V d 2:
DECLARE
v_deptno
v_loc

NUMBER(2);
VARCHAR2(15);

BEGIN

Trang 76

Oracle c bn - SQL v PL/SQL


SELECT deptno, loc INTO v_deptno, v_loc
FROM dept
WHERE dname = 'SALES';
EXCEPTION
WHEN others THEN
Message(SQLERRM);
END;

12.2.LNH LP TRNH PL/SQL N GIN


12.2.1. Lnh IF
Thc hin cu lnh theo iu kin.
C php:
IF <iu kin 1> THEN
Cng vic 1;
[ELSIF <iu kin 2> THEN
Cng vic 2;
]

[ELSE
Cng vic n + 1;
]
END IF;

V d 1:
IF ename = 'SCOTT' THEN
beam_me_up := 'YES';
COMMIT;
ELSE
beam_me_up := 'NO';
ROLLBACK;
END IF;

V d 2:
IF choice= 1 THEN
action := 'Run payroll';
ELSIF choice=2 THEN
action:='Run';
ELSIF choice=3 THEN
action:='Backup';
ELSE
action:='Invalid';
END IF;
Trang 77

Oracle c bn - SQL v PL/SQL

12.2.2. Lnh lp LOOP khng nh trc


Trong lnh lp ny, s ln lp tu thuc vo iu kin kt thc vng lp v khng xc nh c ngay ti
thi im bt u vng lp.
C php:
LOOP
Cng vic;
EXIT WHEN iu kin;
END LOOP;

V d:
x := 0;
y := 1000;
LOOP
x := x + 1;
y := y - x;
EXIT x > y;
END LOOP;

12.2.3. Lnh lp LOOP c nh trc


Ngay khi bt u vng lp, ta xc nh c s ln lp. C php:
LOOP Index IN Cn di .. Cn trn
Cng vic;
END LOOP;

V d:
x := 0;
LOOP Index IN 1 .. 100
x := x + 1;
END LOOP;

12.2.4. Lnh lp WHILE


C php:
WHILE iu kin LOOP
Cng vic;
END LOOP;

V d:
WHILE length(:Address) < 50 LOOP
:Address := :Address || ;
END LOOP;

12.2.5. Lnh GOTO, nhy v iu kin


C php:
GOTO

Nhn;
Trang 78

Oracle c bn - SQL v PL/SQL

V d:
BEGIN
<<Nhn>>
cng vic;
GOTO Nhn;
END;

12.3.GII THIU CURSOR


Cursor l kiu bin c cu trc, cho php ta x l d liu gm nhiu dng. S dng ph thuc vo cu lnh
truy vn d liu sau n. Trong qu trnh x l, ta thao tc vi cursor thng qua tng dng d liu. Dng d
liu ny c nh v bi mt con tr. Vi vic dch chuyn con tr, ta c th ly c ton b d liu tr v.
Cc bc s dng bin cursor:
Khai bo --> m cursor

--> ly d liu x l --> ng cursor

Khai bo:
CURSOR Tn cursor( danh sch bin) IS Cu
lnh truy vn;

V d1:
CURSOR

c_Dept
IS
SELECT deptno, dname
FROM dept
WHERE deptno>10;

CURSOR

c_Dept(p_Deptno NUMBER)
SELECT deptno, dname
FROM dept
WHERE deptno>10;

V d2:
IS

M cursor:
OPEN Tn cursor | Tn cursor( danh sch bin);

V d1:
OPEN

c_Dept;

OPEN

c_Dept(10);

V d2:
Ly d liu:
FETCH Tn cursor INTO Tn bin;

V d:
FETCH c_Dept INTO v_Dept;

ng cursor:
CLOSE Tn cursor;

V d:
CLOSE c_Dept;

Cc thuc tnh:
%isopen

tr li gi tr True nu cursor ang m

Trang 79

Oracle c bn - SQL v PL/SQL


%notfound
%found
%rowcount

tr
li
tr
row
tr

li gi tr True nu lnh fetch hin thi tr


khng c row
li gi tri true cho n khi fetch khng cn
no
li s row c thc hin bng lnh fetch

V d1:
DECLARE
-- Khai bo cursor truy vn d liu
CURSOR c_Emp IS
SELECT *
FROM emp
WHERE dept_id = 10;
-- Khai bo bin cursor tng ng cha dng d liu
v_Emp c_EMP%rowtype;
BEGIN
-- M cursor
OPEN c_Emp;
LOOP
-- Ly dng d liu t cursor
FETCH c_Emp INTO v_Emp;
-- Thot khi vng lp nu ly ht d liu trong cursor
EXIT WHEN c_Emp%notfound;
-- B sung d liu vo Emp_ext theo d liu ly c t
cursor
INSERT INTO Emp_ext (empno, ename, job)
VALUES (v_Emp.empno, v_Emp.ename, v_Emp.job); END
LOOP;
-- ng cursor
CLOSE c_Emp;
END;

V d 2:
DECLARE
-- Khai bo cursor, c cho php cp nht d liu
CURSOR
c_Dept
IS
SELECT dname, loc
FROM dept FOR UPDATE OF loc;
-- Khai bo bin lu tr d liu
v_Dept
c_Dept%ROWTYPE;
v_sales_count
NUMBER:=0;
v_non_sales
NUMBER:=0;
BEGIN
-- M cursor
OPEN c_Dept;
LOOP
-- Ly tng dng d liu ca cursor x l
FETCH c_Dept INTO v_Dept;
-- Thot khi lnh lp nu duyt ht tt c d liu
EXIT WHEN c_Dept %notfound;
IF (v_Dept.dname = 'SALES')AND(v_Dept.loc!='DALLAS') THEN
-- Cp nht d liu trn cursor
Trang 80

Oracle c bn - SQL v PL/SQL


UPDATE Dept
SET loc='DALLAS'
WHERE CURRENT OF c_Dept;
-- m s lng bn ghi c cp nht
v_sales_count := sales_count + 1;
ELSIF (v_dept.dname != 'SALES')AND(v_Dept.loc!='NEWYORK')
THEN
-- Cp nht d liu trn cursor
UPDATE Dept
SET
loc
=
'NEWYORK'
WHERE CURRENT OF c_Dept;
-- m s lng bn ghi c cp nht
v_non_sales := v_non_sales + 1;
END IF;
END LOOP;
-- ng cursor
CLOSE c_Dept;
-- Lu gi cc thng s va xc nh vo bng
INSERT INTO counts (sales_set, non_sales_set)
VALUES (v_sales_count, v_non_sales);

END;

-- Ghi nhn cc thay i d liu trn


COMMIT;

12.4.CC KIU D LIU THNG DNG


12.4.1. Kiu d liu Table
C php:
TYPE Tn_kiu_Table IS
TABLE OF Tn kiu d liu [NOT NULL] INDEX BY BINARY_INTEGER;
Tn bin

Tn_kiu_Table;

V d:
TYPE t_Name IS
TABLE OF Emp.Ename%TYPE INDEX BY BINARY_INTEGER;
v_First_name
v_Last_name

t_Name;
t_Name;

12.4.2. Kiu d liu Record


C php:
TYPE Tn_kiu_Record IS
RECORD OF (
Col1
Col2
Tn bin

Tn kiu [NOT NULL{:=|DEFAULT} biu thc],


Tn kiu [NOT NULL{:=|DEFAULT} biu
thc]...);

Tn_kiu_Record;

V d:
TYPE t_Emp IS
RECORD OF (
empno

number(4) not null,

Trang 81

Oracle c bn - SQL v PL/SQL


ename
job
mgr
hiredate
sal
comm
deptno
v_Emp_record

char(10),
char(9),
number(4),
date default sysdate,
number(7,2),
number(7,2),
number(2) not null);

t_Emp;

12.4.3. Sao kiu d liu mt dng


Bn ghi trong PL/SQL. l mt bin c th gi nhiu gi tr v l mt tp hp cc bin tng ng vi cc
trng trong table.
Khai bo kiu d liu bn ghi.
Tn bin

Tn bng%ROWTYPE;

V d:
v_Emp emp%ROWTYPE;

Truy nhp n cc trng trong d liu bn ghi dng ging nh trong 1 dng d liu tr v. V d:
v_Emp.empno, v_Emp.sal, ...

12.4.4. Sao kiu d liu ca mt ct


C php:
Tn bin

Tn ct d liu%TYPE;

v_Sal

Emp.sal%TYPE;

V d:

12.4.5. Lnh SELECT... INTO


C php:
SELECT col1, col2...
INTO var1, var2... [cursor_var]
FROM table1, table2...
[WHERE condition1, condition2... ]
[GROUP BY col1, col2 ...]
[HAVING
condition1,
condition2...]
[FOR UPDATE];

Vi:
INTO var1, var2... [cursor_var]
Bin lu gi cc gi tr trong
table ly t lnh select.

V d:
SELECT deptno, loc INTO v_deptno, v_loc
FROM dept
WHERE dname = SALES;

Trang 82

Oracle c bn - SQL v PL/SQL

12.5.BI TP
1. Vit on chng trnh tm kim cc hng trong bng EMP vi bin c a t
ngoi vo l &1 dng JOb_type(emp.job%type) v a ra thng bo thch hp
vo bng MESSAGES.
2. Vit on chng trnh ghi d liu vo bng MESSAGES vi ct NUMCOL1 mang gi tr
l 1 nu l row 1 c Insert, 2 nu row 2 c Insert... . Khng c Insert nhng
row c gi tr l 6 hoc 8, thot khi vng lp insert sau gi tr 10. Commit sau vng
lp.
3. Lit k cc ct ENAME, HIREDATE, SAL Vi iu kin EMPNO bng gi tr bin
&EMPLOYEE_NO c a vo, sau kim tra:

1.1
1.2
1.3

C phi mc lng ln hn 1200


Tn nhn vin c phi c cha ch T
ngy gia nhp c quan c phi l thng 10 (DEC)

v a gi tr kim tra ny vo bng message ct charcol1 (th vi cc gi tr 7654, 7369,


7900, 7876)
4. a vo vng lp v t 1 n 10 lnh:
UPDATE messages
SET
numcol2=100
WHERE numcol1 = v;
nu bt k mt ln update no c s lng row >1 th exit khi vng lp.

Trang 83

Oracle c bn - SQL v PL/SQL

Chng 13. GII THIU PROCEDURE BUILDER


Procedure builder l mt thnh phn c tch hp vo mi trng pht trin ng dng ca Oracle. N cho
php ngi s dng c th son tho, bin dch, kim tra v d li i vi cc hm, th tc hay package vit
bi ngn ng PL/SQL c Client v Server.

13.1.CC THNH PHN TRONG PROCEDURE BUILDER


Thnh phn

Din gii

Object Navigator

iu khin truy nhp cc hm, th tc PL/SQL. Thc hin


thao tc d li (debug) trn cc khi lnh SQL v PL/SQL.

PL/SQL Interpreter

D li m ngun PL/SQL.

Program Unit Editor

To v son tho cc m ngun khi lnh PL/SQL.

Store Program Unit Editor To v son tho cc m ngun khi lnh PL/SQL trong
cc Store Program thuc Server.
Database Trigger Edditor

To v son tho cc m ngun khi lnh PL/SQL trong


cc Trigger thuc Server.

13.1.1. Object Navigator


Object Navigator cho php hin th cc i tng trong database.
Ta c th to, son tho cc th tc PL/SQL cng nh d li, np cc th vin thng qua Object Navigator.
Vi Object Navigator, ta cng c th thc hin sao chp cc th tc, hm thng qua cc thao tc n gin
nh copy v paste.

Hnh v 7. Cu trc ca Object Navigator

Cc thnh phn chnh ca Object Navigator bao gm:


Navigator drop down litst: Danh sch s xung hin th tn cc th tc Subject
indicator: nh v cc i tng cn son tho
Type icon: Biu tng cho cc loi
Trang 84

Oracle c bn - SQL v PL/SQL

Object
name:
Tn
cc
i
tng
Find field: Tm kim cc i tng theo tn

13.1.2. Program Unit Editor


L mi trng to, son tho, bin dch v hin th li bin dch cc hm, th tc.

Hnh v 8. Son tho hm, th tc pha Client

Cc thnh phn chnh:


Cc nt bm thc hin cng vic: Compile, Apply, Revert, New, Delete, Close v
Help
Danh sch tn cc hm, th tc khc
Ni son tho hm, th tc

13.1.3. Store Program Unit Editor


Cng tng t nh Program Unit Editor, Store Program Unit Editor c s dng cho vic to, son tho
cc hm, th tc trn server.
Cc chc nng trong Store Program Unit Editor hon ton tng t nh trong Program Unit Editor.
Ta ch gi Store Program Unit Editor sau khi thc hin kt ni ti mt database c th no .

13.1.4. Database Trigger Edditor


L mi trng dng to v son tho cc trigger database trn server.

Trang 85

Oracle c bn - SQL v PL/SQL

Hnh v 9. Son tho hm, th tc, trigger pha Server

Trigger database c phn ra lm nhiu loi khc nhau v c thc hin trc hoc sau mi thao tc c
th trn tng bng d liu ca database.

13.2.CC HM, TH TC
13.2.1. To hm, th tc trn Client
i vi hm, th tc hay package trn client, ta c th to v bin dch ngay chng. Oracle Builder h tr
trnh thng dch cho php kim tra li ca on chng trnh va thc hin.

Hnh v 10. To hm, th tc ti Client

Vic to hm, th tc c thc hin theo ba bc:


Khai bo tn hm hay th tc
Son tho ni dung ca hm hay thu tc
Bin dich hm hay th tc va to v xc nh cc li nu c.

13.2.2. To hm, th tc trn Server


Procedure Builder ch cho php to mi, sa cha v lu li cc thay i i vi cc hm v th tc trn
Server, khng h tr vic bin dch v pht hin li.
Trang 86

Oracle c bn - SQL v PL/SQL

Hnh v 11. To hm, th tc ti Server

Ta thc hin vic to hm, th tc trn server theo hai bc:


To hm, th tc
Son tho v ghi li ni dung ca hm, th tc

13.2.3. D li i vi cc hm, th tc
Vi Procedure Builder, ta c th thc hin chy cc hm, th tc theo tng bc. Qua , ta c th pht hin
c cc li xy ra trong chng trnh, nu c. Mn hnh PL/SQL Interpreter cho php ta thc hin iu
ny:

Hnh v 12. Mn hnh PL/SQL Interpreter

Cu trc ca mn hnh PL/SQL Interpreter c chia lm ba phn chnh:


Phn m ngun hm, th tc
Phn iu khin
Phn tng tc trc tip vi d liu
Trang 87

Oracle c bn - SQL v PL/SQL

Chng 14. GII THIU CC TH TC, HM V PACKAGE


14.1.TH TC
Mt nhm cc lnh thc hin chc nng no c th c gom li trong mt th tc (procedure) nhm lm
tng kh nng x l, kh nng s dng chung, tng tnh bo mt v an ton d liu, tin ch trong pht trin.
Th tc c th c lu gi ngay trong database nh mt i tng ca database, sn sng cho vic ti s
dng. Th tc lc ny c gi l Store procedure. Vi cc Store procedure, ngay khi lu gi Store
procedure, chng c bin dch thnh dng p-code v th c th nng cao kh nng thc hin.

14.1.1. To th tc
Ta c th to th tc trc tip bng dng lnh sau: C php:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(argument1
[mode1]
datatype1,
argument2
[mode2]
datatype2,
...)]
IS | AS
BEGIN
PL/SQL Block;
END;
Vi:
procedure_name
argument
mode
datatype
PL/SQL Block

Tn th tc
Tn tham s
Loi tham s: IN hoc OUT hoc IN OUT,
mc nh l IN
Kiu d liu ca tham s
Ni dung khi lnh SQL v PL/SQL trong
th tc

V d:
CREATE OR REPLACE PROCEDURE change_sal
(p_Percentage
IN number,
p_Error
OUT varchar2,
)
IS
v_User_exp
Exception;
BEGIN
IF p_Percentage < 0 THEN
RAISE v_User_exp;
END IF;
UPDATE emp
SET sal = sal*p_Percentage/100;
EXCEPTION
Trang 88

Oracle c bn - SQL v PL/SQL

WHEN v_User_exp THEN


p_Error := Li: Phn trm nh hn 0;
RETURN;
WHEN others THEN
p_Error := Li: || SQLERRM;
END;
Vi vic to cc th tc thng qua cu lnh, ta c th d dng to cc script cha cc th tc cn thit khi to
mi mt database.
Mt cch khc, ta c th to mi hay sa i th tc thng qua cng c ca Oracle. Trong chng trc, ta
bit cch s dng Procedure Builder to mi th tc.

14.1.2. Hu b th tc
Tng t nh vic to th tc, ta c th hu b th tc thng qua cu lnh SQL. C php:
DROP PROCEDURE

Tn th tc;

DROP PROCEDURE

change_sal;

V d:

14.1.3. Cc bc lu gi mt th tc
Mt th tc trong Oracle c thc hin theo hai bc chnh sau:
1. Ni dung ca th tc c thit lp v lu gi trong database di dng vn bn
(text)
2. Ton b ni dung ca th tc c bin dch ra dng m p-code, tin cho vic thc
hin th tc .

Hnh v 13. Cc bc thc hin mt th tc

14.2.HM
Tng t nh th tc, hm (function) cng l nhm cc lnh PL/SQL thc hin chc nng no . Khc vi
th tc, cc hm s tr v mt gi tr ngay ti li gi ca n.
Trang 89

Oracle c bn - SQL v PL/SQL

Hm cng c th c lu gi ngay trn database di dng Store procedure.

14.2.1. To hm
Ta c th to hm trc tip bng dng lnh sau: C php:
CREATE [OR REPLACE] FUNCTION function_name
[(argument1
[mode1]
datatype1,
argument2
[mode2]
datatype2,
...)]
RETURN
datatype
IS | AS
BEGIN
PL/SQL Block;
END;
Vi:
function_name
argument
mode
datatype
PL/SQL Block

Tn hm
Tn tham s
Loi tham s: IN hoc OUT hoc IN OUT,
mc nh l IN
Kiu d liu ca tham s
Ni dung khi lnh SQL v PL/SQL trong
th tc

V d:
CREATE OR REPLACE FUNCTION get_sal
(p_Emp_id
IN number)
RETURN varchar2
IS
BEGIN
SELECT sal
FROM emp
WHERE emp_id = p_Emp_id;
RETURN
null;
EXCEPTION
WHEN others THEN
RETURN
Li: || SQLERRM;
END;

14.2.2. Thc hin mt hm


Qu trnh lu gi v bin dch mt hm cng tng t nh i vi mt th tc. Qu trnh
gi v thc hin mt hm c din ra theo ba bc:
1. Vic gi hm c thc hin ngay khi tn hm trong biu thc c tham chiu ti
2. Mt bin host (host variable) c t ng to ra lu gi gi tr tr v ca hm
3. Thc hin ni dung trong phn thn hm, lu li gi tr

Trang 90

Oracle c bn - SQL v PL/SQL

V d:
SQL> VARIABLE v_Sal number;
SQL>
EXECUTE
:v_SAL
:=
get_sal(7934);
PL/SQL procedure successfully completed.
SQL> PRINT v_Sal;
v_Sal
1300

14.2.3. Li ch ca vic s dng hm


Vi vic s dng hm, trong mt s trng hp ta c th thy c cc li im nh sau:
Cho php thc hin cc thao tc phc tp (cc php tm kim, so snh phc tp)
ngay trong mnh ca cu lnh SQL m nu khng s dng hm ta s khng th
no thc hin c
Tng tnh c lp ca d liu do vic phn tch v x l d liu c thc hin ngay
trn Server thay v tr v d liu trc tip cho ng dng di Client chng tip tc
x l.
Tng tnh hiu qu ca cu lnh truy vn bng vic gi cc hm ngay trong cu lnh
SQL
Ta c th s dng hm thao tc trn cc kiu d liu t to. Cho
php thc hin ng thi cc cu lnh truy vn

14.2.4. Mt s hn ch khi s dng hm trong cu lnh SQL


Ch cc hm do ngi dng nh ngha c lu trn database mi c th s dng
c cho cu lnh SQL.
Cc hm do ngi dng nh ngha ch c p dng cho iu kin thc hin trn
cc dng d liu (mnh WHERE), khng th p dng cho cc iu kin thc hin
trn nhm (mnh GROUP).
Tham s s dng trong hm ch c th l loi IN, khng chp nhn gi tr OUT hay
gi tr IN OUT.
Kiu d liu tr v ca cc hm phi l kiu d liu DATE, NUMBER, NUMBER.
Khng cho php hm tr v kiu d liu nh BOOLEAN, RECORD, TABLE. Kiu d
liu tr v ny phi tng thch vi cc kiu d liu bn trong Oracle Server.

14.2.5. Hu b hm
Tng t nh vic to hm, ta c th hu b hm thng qua cu lnh SQL. C php:
DROP FUNCTION Tn hm;
V d:
DROP FUNCTION get_sal;

Trang 91

Oracle c bn - SQL v PL/SQL

14.2.6. Hm v th tc
Ta to cc th tc lu gi mt lot cc cc cu lnh phc v cho nhiu ln gi khc nhau. Th tc c th
khng c, c mt hoc nhiu tham s. Tuy nhin th tc khng tr li bt k mt kt qu no.
Hm cng ging nh th tc, n cng bao gm mt lot cc cu lnh, c th khng c, c mt hoc nhiu
tham s. Tuy nhin khc vi th tc, hm bao gi cng tr v mt kt qu. V vy, ta s dng hm trong cc
php tnh ton, gn gi tr. Khi , cu lnh thc hin s d dng v sng sa hn.

So snh gia hm v th tc
Th tc

Hm

Thc hin ging nh thc hin cc cu


lnh PL/SQL

C th c gi ging nh mt phn ca
biu thc

Khng c kiu gi tr tr v

C cha gi tr tr v

C th tr v mt hoc nhiu gi tr
(thng qua tham s OUT)

Tr v mt gi tr

Li ch ca vic s dng hm, th tc


Nng cao hiu sut: Trnh vic ti s dng cc cu lnh nhiu ln bi nhiu User
khc nhau. Gim thiu thi gian bin dch cu lnh PL/SQL trong pha phn tch cu
lnh. Gim thiu s ln gi lnh thc hin trn database, t , lm gim lu lng
truyn thng trn mng.
Nng cao kh nng bo tr: Ta c th d dng sa ni dung bn trong cc hm, th
tc m khng nh hng n vic giao tip ca chng (cc tham s v li gi vn y
nguyn). Thay i ni dung ca mt hm, hay th tc c th ng dng c ngay
cho nhiu user khc nhau.
Tng tnh bo mt v ton vn ca d liu: Vi vic iu khin truy nhp d liu dn
tip i vi cc i tng trong database s lm nng cao tnh bo mt ca d liu.
Quan h gia cc cu lnh trong hm, th tc lun c m bo.

14.3.PACKAGE
Package l mt tp hp cc kiu d liu, bin lu gi gi tr v cc th tc, hm c cng mt mi lin h vi
nhau, c gp chung li. c im ni bt nht ca package l khi mt phn t trong package c gi th
ton b ni dung ca package s c np vo trong h thng. Do , vic gi ti cc phn t khc trong
package sau ny s khng phi mt thi gian np vo h thng na. T , nng cao tc thc hin lnh
ca ton b hm, th tc c trong package.

14.3.1. Cu trc ca package


Mt package c cu trc lm hai phn. Phn m t (specification) nh ngha cc giao tip c th c ca
package vi bn ngoi. Phn thn (body) l cc ci t cho cc giao tip c trong phn m t trn.

Trang 92

Oracle c bn - SQL v PL/SQL

Hnh v 14. Cu trc package

Trong cu trc ca package bao gm 05 thnh phn:


1. Public variable (bin cng cng): l bin m cc ng dng bn ngoi c th tham
2.
3.
4.
5.

chiu ti c.
Public procedure (th tc cng cng): bao gm cc hm, th tc ca package c th
triu gi t cc ng dng bn ngoi.
Private procedure (th tc ring phn): l cc hm, th tc c trong package v ch
c th c triu gi bi cc hm hay th tc khc trong package m thi.
Global variable (bin tng th): l bin c khai bo dng trong ton b package,
ng dng bn ngoi tham chiu c ti bin ny.
Private variable (bin ring phn): l bin c khai bo trong mt hm, th tc thuc
package. N ch c th c tham chiu n trong bn thn hm hay th tc .

14.3.2. To package
Ta c th to package trc tip bng dng lnh sau: C php
khai bo phn m t package:
CREATE [OR REPLACE] PACKAGE package_name IS
| AS
public type and cc item declarations
subprogram specifications
END package_name;
Vi:
package_name
Tn package
type and item declarations

subprogram specifications
PL/SQL

Phn khai bo cc bin,


hng, cursor, ngoi l v
kiu s dng trong ton b
package
Khai bo cc hm, th tc

C php khai bo phn thn package:


CREATE [OR REPLACE] PACKAGE BODY package_name
Trang 93

Oracle c bn - SQL v PL/SQL

IS | AS
private type and item declarations

subprogram bodies

Khai bo cc kiu
ch s dng ring
trong package
Ni dung ca
package

END package_name;
Vi:
package_name
type and item declarations
subprogram specifications

Tn package
Phn khai bo cc bin, hng,
cursor, ngoi l v kiu
Khai bo cc hm, th tc
PL/SQL

V d:
-- Phn khai bo ca package
CREATE OR REPLACE PACKAGE comm_package
IS
v_comm

number := 10; -- Khai bo bin c gi tr khi to

-- Khai bo th tc giao tip vi bn ngoi


PROCEDURE reset_comm (p_comm IN number);
END comm_package;
-- Phn thn ca package
CREATE OR REPLACE PACKAGE BODY comm_package
IS
-- Hm ring phn ch s dng trong package
FUNCTION
validate_comm
(v_comm
IN number)
RETURN BOOLEAN
IS
v_max_comm number;
BEGIN
SELECT max(comm) INTO v_max_comm
FROM
emp;
IF v_comm > v_max_comm THEN
RETURN
FALSE;
ELSE
RETURN
TRUE;
END IF;
END validate_comm;
-- Th tc giao tip vi bn ngoi
PROCEDURE reset_comm
(p_comm
IN number)
IS
Trang 94

Oracle c bn - SQL v PL/SQL

v_valid

BOOLEAN;

BEGIN
v_valid := validate_comm(p_comm);
IF v_valid = TRUE THEN
v_comm := p_comm;
ELSE
RAISE_APPLICATION_ERROR(-20210,Invalid
END IF:
END reset_comm;
END comm_package;

comm);

14.3.3. Hu package
Tng t nh vic to package, ta c th hu b hm thng qua cu lnh SQL. C php:
-- Hu phn package specification
DROP PACKAGE
Tn package;
-- Hu phn package body
DROP PACKAGE
BODY
Tn package;
V d:
DROP PACKAGE
DROP PACKAGE

comm_package;
BODY
comm_package;

14.3.4. Li ch ca vic s dng package Tng tnh phn


nh cc thnh phn (Modularity)
Ta c th ng gi cc thnh phn, cu trc c quan h logic vi nhau trong cng mt module ng vi mt
package. Vic k tha gia cc package rt n gin, v c thc hin mt cch trong sng.

n gin trong vic thit k ng dng


Tt c cc thng tin cn thit cho vic giao tip u c t trong phn c t ca package (package
specification). Ni dung phn ny c th c son tho v bin dch c lp vi phn thn ca package
(package body). Do , cc hm hay th tc c gi ti cc thnh phn ca package c th c bin dch tt.
Phn thn ca package c th c tip tc pht trin cho n khi hon thnh ng dng.

n du thng tin (hiding information)


Package cho php s dng cc thnh phn bn trong di dng public (cng cng) hay private (ring t).
Tu theo yu cu thit k, ta c th cho php truy nhp hay n du thng tin. T , c th bo v c tnh
ton vn d liu.

Nng cao hiu sut s dng


Ngay khi gi mt hm hay th tc bt k trong package ln u tin. Ton b ni dung ca package s c
np vo b nh. Do vy, cc hm v th tc con trong package gi n sau ny c th thc hin ngay m
khng cn phi np li vo b nh. Vic ny lm gim thiu thao tc truy xut vo ra (I/O access) nng cao
tc .
Trang 95

Oracle c bn - SQL v PL/SQL

Thc hin qu ti (overloading)


Package cho php thc hin qu ti i vi cc hm v th tc trong n. Theo , cc hm v th tc khc
nhau c th c php t trng tn. Vic ny s nng cao tnh mm do ca vic s dng hm, th tc trong
package.

14.3.5. Mt s package chun ca Oracle


Th tc

Hm

DBMS_ALERT

Cung cp cc s kin v cc thng ip ca database

DBMS_APPLICATION_INFO

Thng tin v cc hot ng hin thi i vi database

DBMS_DDL

Bin dch li cc hm, th tc va package. Phn tch cc


index, table, cluster,...

DBMS_DESCRIBE

Tr v cc din gii cho cc tham s ca th tc, hm

DBMS_JOB

Ln k hoch thc hin cc on m lnh PL/SQL

DBMS_LOCK

Cung cp cc hm cho php yu cu, gii phng, iu


chnh cc trng thi kho (lock) i vi tng i tng
trn database.

DBMS_MAIL

Gi cc message t Oracle Server ti Oracle*mail

DBMS_OUTPUT

Kt xut cc gi tr tr v t cc hm, th tc, trigger,..

DBMS_PIPE

Cho php x l gi ng thi cc thng ip

DBMS_SESSION

Cung cp cc php truy nhp SQL thay v cc cu lnh


session

DBMS_SHARED_POOL

Cho php lu gi cc i tng trong vng nh chia s.

DBMS_SQL

Cho php s dng lnh SQL ng truy xut database

DBMS_TRANSACTION

iu khin cc giao dch, ci thin v nng cao hiu qu


i vi cc giao dch nh v khng phn tn

DBMS_UTILITY

Phn tch cc i tng trong tng schema.

UTL_FILE

Cho php truy xut ti file ngay vi cu lnh PL/SQL

Trang 96

Oracle c bn - SQL v PL/SQL

Chng 15. DATABASE TRIGGER


Database trigger l nhng th tc c thc hin ngm nh ngay khi thc hin lnh SQL nh INSERT,
DELETE, UPDATE nhm m bo cc quy tc logic phc tp ca d liu. Thit k cc database trigger
tho mn cc yu cu sau:
S dng cc database trigger nhm m bo thc hin tt c cc thao tc c lin
quan ti lnh can thip d liu c thc hin.
Ch s dng database trigger i vi cc thao tc trng tm.
Khng s dng database trigger thc hin cc rng buc sn c trong database
Oracle. V d: dng database trigger thay th cho cc constrain.
S dng database trigger c th gy ri, kh khn cho vic bo tr v pht trin h
thng ln. V th, ta ch s dng database trigger khi tht cn thit.

15.1.TO TRIGGER
Khi to database trigger, ta cn lu ti mt s tiu ch nh:
Thi gian thc hin: BEFORE, AFTER
Hnh ng thc hin: INSERT, UPDATE, DELETE
i tng tc ng: bng d liu
Loi trigger thc hin: trn dng lnh hay trn cu lnh Mnh
iu kin thc hin
Ni dung ca trigger

15.1.1. Phn loi trigger


Ta c th phn loi trigger theo thi gian thc hin nh: BEFORE v AFTER.
BEFORE trigger: Trigger c kch hot trc khi thc hin cu lnh. Vic ny c
th cho php ta loi bt cc php x l khng cn thit, thm ch c th rollback d
liu trong trng hp c th gy ra cc ngoi l (exception). Trigger thuc loi ny
thng c s dng i vi cc thao tc INSERT hoc UPDATE.
AFTER trigger: Cu lnh c thc hin xong th trigger mi c kch hot.
Thc hin cc cng vic thng phi lm sau khi thc hin cu lnh.
INSTEAD OF trigger: Loi trigger ny cho php ngi s dng c th thay i
mt cch trong sut d liu ca mt s view m khng th thc hin thay i trc
tip c. Vi INSTEAD OF trigger, ta c th thc hin vi c ba thao tc: insert,
update, delete.

Ta cng c th phn loi trigger theo loi cu lnh kch hot nh: INSERT, UPDATE, DELETE. Trong
cc trigger thuc mt trong ba loi lnh: INSERT, UPDATE,DELETE. Trigger UPDATE cn phi ch
r thm tn ct d liu kch hot trigger mi khi gi tr d liu trong b thay i. Bn trong Trigger c th
c cha cc lnh thao tc d liu. Do , cn phi trnh trng hp lp li theo kiu quy.
Mt cch khc ta cng c th phn loi trigger theo s ln kch hot. theo s c 02 loi trigger:
Trigger mc lnh: Trigger c kch hot mi khi thc hin cu lnh.
Trigger mc dng lnh: Trigger c kch nhiu ln ng vi mi dng d liu chu
nh hng bi thao tc thc hin lnh.
Trang 97

Oracle c bn - SQL v PL/SQL

Hnh v 15. Th t thc hin trigger

15.1.2. Lnh to trigger


Ta c th to trigger thng qua lnh script.
C php lnh to trigger mc cu lnh:
CREATE [OR REPLACE] TRIGGER trigger_name
timing event1 [OR event2 OR event3]
ON table_name
BEGIN
PL/SQL Block;
END;
C php lnh to trigger mc dng d liu:
CREATE [OR REPLACE] TRIGGER trigger_name
timing event1 [OR event2 OR event3]
ON table_name
[REFERENCING OLD AS old | NEW AS new]
FOR EACH ROW
[WHEN condition]
BEGIN
PL/SQL Block;
END;
Vi:
trigger _name
timing
event
referencing
FOR EACH ROW
WHEN
table_name
PL/SQL Block

Tn trigger
Thi gian kch hot trigger
Loi cu lnh kch hot trigger
Tn bin thay th cho gi tr trc v
sau thay i ca dng d liu ang x l
Trigger thuc loi tc ng trn dng d
liu
Ch ra mt s iu kin rng buc thc
hin trigger
Tn bng d liu c gn trigger trn
Ni dung khi lnh SQL v PL/SQL trong
trigger
Trang 98

Oracle c bn - SQL v PL/SQL

V d:
CREATE OR REPLACE TRIGER
BEFORE INSERT ON emp

secure_emp

BEGIN
IF TO_CHAR(sysdate,DY) IN (SAT,SUN)
OR TO_CHAR(sysdate,HH24) NOT BETWEEN 08 AND 18
THEN
RAISE_APPLICATION_ERROR (-20500,
Thi gian lm vic khng ph hp);
END IF;
END;
CREATE OR REPLACE TRIGER audit_emp_values
AFTER DELETE OR INSERT OR DELETE ON emp FOR
EACH ROW
BEGIN
INSERT INTO audit_emp_values (user_name, timestamp, id,
old_last_name, new_last_name, old_title,
new_tile, old_salary, new_salary)
VALUES (USER, SYSDATE, :old.empno, :old.ename,
:new.ename, :old.job, :new.job, :old.sal,
:new.sal);
END;

15.1.3. S dng Procedure builder to trigger


Ta cng c th to database trigger thng qua cng c Procedure builder ca Oracle. Ta ln lt
thc hin theo cc bc sau:
1. Kt ni ti database
2. Dch chuyn ti i tng t trigger trong phn Object Navigator
3. Chuyn ti phn trigger ri bm nt New to mi trigger.
4. t cc tu chn v thi gian, kiu,.. cho trigger
5. Son tho ni dung ca trigger
6. Lu gi trigger

Trang 99

Oracle c bn - SQL v PL/SQL

Hnh v 16. To trigger bng cng c Procedure Builder

Hnh v 17. Trigger tc ng trn dng d liu

15.2.QUN L TRIGGER
15.2.1. Phn bit database trigger
Trigger v th tc
Trigger

Th tc

Lnh to CREATE TRIGGER

Lnh to CREATE PROCEDURE

Lu gi trong T in d liu di dng


m ngun v dng p-code

Lu gi trong T in d liu di dng


m ngun v dng p-code

c gi ngm nh

Thc hin theo li gi tng minh

Khng cho php dng: COMMIT,


ROLLBACK, SAVEPOINT

Cho php dng: COMMIT, ROLLBACK,


SAVEPOINT.
Trang 100

Oracle c bn - SQL v PL/SQL

Database Trigger v Form Trigger


Database Trigger

Form Trigger

c thc hin khi c tc ng ln


database do ng dng hoc do chnh cc
cng c ca Oracle

c thc hin ch bi cc tc ng ngay trn


ng dng

c kch hot bi cc lnh SQL


Phn bit hai loi trigger trn cu lnh v
trn dng d liu
Tu theo li xy ra, trigger c th gy ra
rollback cu lnh

c kch bi cc s kin trn ng dng Khng


phn bit
Tu theo li xy ra, c th rollback ton b giao
dch

Database Trigger c kch hot c lp vi cc Form Trigger

15.2.2. Thay i trng thi ca database trigger


Cho php/ khng cho php kch hot mt databse trigger C php:
ALTER TRIGGER

trigger_name

trigger_name

Tn trigger;

DISABLE | ENABLE;

Vi:
V d:
-- Cho php trigger c hot ng
ALTER TRIGGER
check_sal ENABLE;
Cho php/ khng cho php kch hot tt c cc databse trigger ca mt bng C php:
ALTER TABLE

table_name DISABLE | ENABLE ALL TRIGGERS;

table_name

Tn bng;

Vi:
V d:
-- Khng cho php cc trigger ng vi bng emp c hot ng
ALTER TABLE

emp DISABLE ALL TRIGGERS;

Bin dch li databse trigger


C php:
ALTER TRIGGER trigger_name

COMPILE;

V d:
-- Bin dch li trigger check_sal sau khi sa i ni dung
ALTER TRIGGER check_sal COMPILE;

15.2.3. Hu b trigger
S dng cu lnh SQL hu b trigger.
Trang 101

Oracle c bn - SQL v PL/SQL

C php:
DROP TRIGGER

trigger_name;

DROP TRIGGER

check_sal;

V d:

15.2.4. Lu khi s dng trigger


Cc trng hp kim tra trigger
Kim tra trigger ng vi thao tc d liu nh d nh.
Kim tra thc hin trigger theo ng nh mnh When. Kim tra nh hng
ca trigger i vi cc trigger khc. Kim tra nh hng ca cc trigger khc i
vi trigger ang xem xt.

Th t thc hin trigger v cc kim tra rng buc:


1. Thc hin trigger BEFORE STATMENT
2. Lp trn nhiu dng d liu

a. Thc hin trigger BEFORE ROW


b. Thc hin cu lnh thao tc d liu v kim tra ton vn d liu trn dng
d liu xem xt
c. Thc hin trigger AFTER ROW
3. Thc hin cc php kim tra rng buc
4. Thc hin trigger AFTER STATMENT.

Cc quy tc rng buc i vi trigger:


1. Khng c php sa i d liu trong ct d liu c rng buc thuc loi kho
chnh (primary key), kho ngoi (foreign key) hay duy nht.
2. Khng cho php c d liu t cc bng ang thao tc.

Trang 102

Oracle c bn - SQL v PL/SQL

PH LC
A - DANH MC CC HNH V
Hnh v 1. Minh ho cc thnh phn logic trong database ...
Hnh v 2. M hnh d liu thc hnh...
Hnh v 3. Cu lnh ca SQL*Plus ...
Hnh v 4. Hn ch d liu tr v ...
Hnh v 5. Cu trc hm SQL ...
Hnh v 6. Phn loi hm SQL ...
Hnh v 7. Cu trc ca Object Navigator...
Hnh v 8. Son tho hm, th tc pha Client...
Hnh v 9. Son tho hm, th tc, trigger pha Server ...
Hnh v 10. To hm, th tc ti Client ...
Hnh v 11. To hm, th tc ti Server ...
Hnh v 12. Mn hnh PL/SQL Interpreter ...
Hnh v 13. Cc bc thc hin mt th tc ...
Hnh v 14. Cu trc package ...
Hnh v 15. Th t thc hin trigger...
Hnh v 16. To trigger bng cng c Procedure Builder ...
Hnh v 17. Trigger tc ng trn dng d liu...

...6
..7
.12
...17
...23
.24
...84
..85
...86
.86
..87
...87
.89
..93
..98
.100
..100

Trang 103

You might also like