You are on page 1of 78

www.nhipsongcongnghe.

net

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

Cng ty c phn u t pht trin cng ngh - Fpt


H Ni, thng 11 nm 2002.

o to Oracle c bn
Gio trnh SQL v PL/SQL

o to c bn: SQL v PL/SQL

Trang 2

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

Mc lc
Mc lc .................................................................................................................................................3
1

Gii thiu.......................................................................................................................................6

1.1
1.2

Mc tiu kho hc ..............................................................................................................................6


Khi ng v thot khi Oracle.........................................................................................................6
1.2.1
1.2.2

1.3

Gii thiu ngn ng SQL ...................................................................................................................7


1.3.1
1.3.2

1.4
1.5
1.6
1.7

Lnh truy vn c bn........................................................................................................................10


Cc thnh phn khc ca mnh SELECT..................................................................................10
Gi tr Null..........................................................................................................................................11
Lc d liu t cc row c cng gi tr.............................................................................................11
Hin th cu trc bng ......................................................................................................................12
Cc lnh ca cng c SQL*Plus......................................................................................................12
2.6.1
2.6.2
2.6.3

2.7

Cc hm s........................................................................................................................................20
Cc hm k t ...................................................................................................................................22
Cc hm ngy ...................................................................................................................................26
Cc hm chuyn i kiu.................................................................................................................28
Bi tp................................................................................................................................................29
Bi tp................................................................................................................................................32

Cc hm nhm p dng cho ln hn hoc bng 1 dng d liu ........................32

6.1
6.2
6.3
7

Mnh ORDER BY .........................................................................................................................16


Mnh WHERE...............................................................................................................................16
Cc ton t ........................................................................................................................................17
Bi tp................................................................................................................................................19

Bin runtime..............................................................................................................................31

5.1
6

Bi tp................................................................................................................................................14

Cc hm p dng cho 1 dng d liu..............................................................................20

4.1
4.2
4.3
4.4
4.5
5

Cc lnh son tho ...............................................................................................12


Cc lnh v file......................................................................................................13
Cc lnh v column...............................................................................................13

Truy vn d liu c iu kin ............................................................................................16

3.1
3.2
3.3
3.4
4

M hnh quan h d liu..........................................................................................9


M t d liu............................................................................................................9

Lnh truy vn c bn ...........................................................................................................10

2.1
2.2
2.3
2.4
2.5
2.6

Lch s pht trin ca ngn ng SQL .....................................................................7


Chun SQL .............................................................................................................7

Cc khi nim trong CSDL.................................................................................................................7


Danh sch rt gn cc i tng CSDL ...........................................................................................8
Cc lnh SQL ......................................................................................................................................8
Gii thiu v v d thc hnh.............................................................................................................9
1.7.1
1.7.2

Ti Server (Window NT) .........................................................................................6


Ti Client (Window 9x) ............................................................................................6

Cc hm tc ng trn nhm ..........................................................................................................32


Mnh GROUP BY .........................................................................................................................34
Bi tp................................................................................................................................................35

Hin th ni dung d liu t nhiu bng ........................................................................35

7.1

Mi lin kt tng ng .................................................................................................................35

o to c bn: SQL v PL/SQL

Trang 3

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


7.2
7.3
7.4
7.5
7.6
8

Cc lnh truy vn lng nhau...........................................................................................39

8.1
8.2
9

Mi lin kt khng tng ng......................................................................................................35


Mi lin kt cng...............................................................................................................................36
Lin kt ca bng vi chnh n .......................................................................................................36
Cc ton t tp hp ..........................................................................................................................36
Bi tp................................................................................................................................................37
Cu lnh SELECT lng nhau. ..........................................................................................................39
Bi tp................................................................................................................................................40

Cu trc hnh cy...................................................................................................................40

9.1
9.2
9.3

Cu trc hnh cy trong 1 table .......................................................................................................40


K thut thc hin ............................................................................................................................41
Bi tp................................................................................................................................................42

10

Tng kt v lnh select .....................................................................................................44

11

To table ...................................................................................................................................44

11.1
11.2
11.3
11.4

Lnh to bng ...................................................................................................................................44


Cc quy tc t tn object ...............................................................................................................46
Cc quy tc khi tham chiu n object...........................................................................................47
Kiu d liu v iu kin ..................................................................................................................47
11.4.1
11.4.2
11.4.3
11.4.4
11.4.5
11.4.6
11.4.7
11.4.8
11.4.9
11.4.10
11.4.11

CHAR ....................................................................................................................47
VARCHAR2...........................................................................................................48
VARCHAR.............................................................................................................48
NUMBER...............................................................................................................48
FLOAT...................................................................................................................48
LONG ....................................................................................................................49
DATE.....................................................................................................................49
RAW v LONG RAW ............................................................................................50
ROWID ..................................................................................................................50
MLSLABEL............................................................................................................50
Chuyn i kiu ....................................................................................................50

11.5 Constraint..........................................................................................................................................51
11.6 Bi tp................................................................................................................................................52
12

cc lnh DDL khc v d liu trong t in d liu...............................................52

12.1 Chnh sa cu trc table ..................................................................................................................52


12.2 Cc lnh DDL khc ...........................................................................................................................53
12.2.1
12.2.2
12.2.3
12.2.4

Xa table ...............................................................................................................53
Gii thch bng ......................................................................................................53
Thay i tn object................................................................................................53
Xa d liu ca table.............................................................................................53

12.3 D liu trong t in d liu ............................................................................................................54


12.4 Bi tp................................................................................................................................................54
13

Cc lnh Thao tc d liu khc ......................................................................................55

13.1
13.2
13.3
13.4
13.5
13.6
14

Chn mt row vo table ...................................................................................................................55


Chnh sa d liu..............................................................................................................................55
Xa dng ...........................................................................................................................................55
Li rng buc d liu .......................................................................................................................56
Lnh iu khin giao dch................................................................................................................56
Bi tp................................................................................................................................................57

Sequence v index..................................................................................................................57

o to c bn: SQL v PL/SQL

Trang 4

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


14.1 Sequence...........................................................................................................................................57
14.1.1
14.1.2

To Sequence.......................................................................................................57
Xo v sa sequence ...........................................................................................58

14.2 Index ..................................................................................................................................................58


14.3 Bi tp................................................................................................................................................59
15

To view ......................................................................................................................................59

15.1 View....................................................................................................................................................59
15.2 Bi tp................................................................................................................................................61
16

Quyn v bo mt ...................................................................................................................61

16.1 Quyn - PRIVILEGE ..........................................................................................................................61


16.2 ROLE..................................................................................................................................................62
16.3 Synonym............................................................................................................................................63
17

tng quan v pl/sql v procedure builder...............................................................63

17.1 C php lnh PL/SQL .......................................................................................................................63


17.2 PL/SQL block ....................................................................................................................................63
17.3 Gii thiu Procedure builder............................................................................................................64
18

c php lp trnh ...................................................................................................................66

18.1
18.2
18.3
18.4
18.5
19

cursor ........................................................................................................................................68

19.1
19.2
19.3
19.4
19.5
20

IF ........................................................................................................................................................66
LOOP v EXIT....................................................................................................................................66
FOR ....................................................................................................................................................67
WHILE ................................................................................................................................................67
GOTO .................................................................................................................................................67
nh ngha .........................................................................................................................................68
Kiu d liu Table v Record...........................................................................................................69
Sao kiu d liu ................................................................................................................................70
Cu lnh SELECT... INTO... trong PL/SQL......................................................................................70
Bi tp................................................................................................................................................70

procedure v funtion..........................................................................................................71

20.1 Procedure ..........................................................................................................................................71


20.2 Function.............................................................................................................................................72
20.3 Bi tp................................................................................................................................................73
21

pakage.........................................................................................................................................73

21.1 Package .............................................................................................................................................73


22

database trigger ..................................................................................................................74

22.1 Database Trigger...............................................................................................................................74


22.2 Bi tp................................................................................................................................................75
23

error handing .........................................................................................................................76

23.1 Bi tp................................................................................................................................................78

o to c bn: SQL v PL/SQL

Trang 5

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

Gii thiu

1.1

Mc tiu kho hc

Kt thc kho hc hc vin phi nm c

Hiu c phng php, cc thnh phn, thut ng v thao tc trong CSDL quan h

To c cc cu trc d liu nh table, view dng SQL

Ghi, c, v cp nht d liu trong CSDL

Xy dng cc PL/SQL block dng Procedure Builder

1.2

Khi ng v thot khi Oracle

1.2.1

Ti Server (Window NT)

SQLDBA cung cp cc dch v qun tr h thng, nh: to lp CSDL, m - ng CSDL, to v qun l cc


USER ... Cc bc khi ng ti Server nh sau:

Khi ng my ch

Bt dch v OracleServiceXXX (trong XXX l tn ca CSDL) bng cch nhn vo Start -> Program > Service -> OracleServiceXXX -> Nhn chut phi -> Nhn Start. Ch ch bt dch v ny khi ngi
ci t khng ch t ng hay khi dch v ny cha c bt.

Bt dch v OracleXXXTNSLstener (trong XXX l tn ca Database Home) bng cch nhn vo


Start -> Program -> Service -> OracleXXXTNSLstener -> Nhn chut phi -> Nhn Start. Ch ch bt
dch v ny khi ngi ci t khng ch t ng hay khi dch v ny cha c bt.

Khi bt xong CSDL sn sng lm vic

ng CSDL cn lm theo cc bc ngc li:

Tt dch v OracleXXXTNSLstener (trong XXX l tn ca Database Home) bng cch nhn vo


Start -> Program -> Service -> OracleXXXTNSLstener -> Nhn chut phi -> Nhn Stop.

Tt dch v OracleServiceXXX (trong XXX l tn ca CSDL) bng cch nhn vo Start -> Program > Service -> OracleServiceXXX -> Nhn chut phi -> Nhn Stop.

Shutdown my ch.

1.2.2

Ti Client (Window 9x)

Cc ng dng ca oracle chy trong mi trng Windows vi giao din graphic, cc ng dng thng dng
c SQL*Plus, Oracle Form, Oracle Report, Oracle Designer ... Vic chy cc ng dng ny hon ton ging
nh vic chy cc ng dng thng thng trong mi trng windows.
lm vic vi cc ng dng truy cp CSDL Oracle, ngi s dng (NSD) phi connect vo CSDL. C hai
cch connect.
Connect NSD/password, v d NSD tn Scott c password l tiger th
Connect Scott/tiger

Pht lnh connect vi tn NSD, khi Oracle s hi password


Connect Scott
Enter password: *****
o to c bn: SQL v PL/SQL

Trang 6

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


NSD c th lm vic trong phm vi cho php ca mnh m Oracle gi l "khung cnh" (Schema) ca NSD.
Mi khung cnh cha nhiu i tng cc loi, NSD ch c th tc ng ln cc i tng trong khung cnh
ca mnh.
Trong cc ng dng u c chc nng thot v t ng disconnect.
thc hnh phn SQL v PL/SQL gi ng dng SQL* Plus.

1.3

Gii thiu ngn ng SQL

1.3.1

Lch s pht trin ca ngn ng SQL

M hnh c s d liu (CSDL) quan h 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 (RDBMS). 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.3.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.4

Cc khi nim trong CSDL

Table

l cu trc lu tr c bn nht trong CSDL quan h (RDBMS), n bao gm 1 hoc nhiu


column v 0 hoc nhiu row.

Row

l t hp nhng gi tr ca Column trong bng. Mt row cn c th c gi l 1 record.

Column

hin th mt loi d liu trong bng, v d tn phng ban trong bng phng ban. Ngi ta th
hin n thng qua tn column v gi s liu di cc kiu v kch c nht nh.

Field

l giao ca column v row. Field chnh l ni cha d liu. Nu khng c d liu trong field
ngi 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 row trong bng. V d
m phng ban. Primary Key nht thit phi c s liu.
Foreign Key l mt column hoc mt tp cc column tham chiu ti chnh bng hoc mt bng khc.
Foreign Key xc nh mi quan h gia cc bng.
Constraint

l cc rng buc d liu, v d Foreign Key, Primary Key...

o to c bn: SQL v PL/SQL

Trang 7

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

V d:

EMP
EMPNO

DEPT
ENAME

DEPTNO
EMP

7369
Row

DEPTNO

DNAME

DEPT

SMITH

20

10

ACCOUNTING

7499

ALLEN

30

20

RESEARCH

7521

WARD

30

7566

JONES

20

30

SALES

7654

MARTIN

30

40

OPERATIONS

7698

BLAKE

30

7782

CLARK

10

Foreign key
Primary key

Column

1.5

Danh sch rt gn cc i tng CSDL

Table

l 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

kt sinh gi tr cho cc primary key

Index

tng tnh thc thi ca cu truy vn

Synonym

tn tng ng ca i tng

Program unit gm Procedure, function, package...

1.6

Cc lnh SQL

Lnh
SELECT
INSERT
UPDATE
DELETE
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMIT
ROLLBACK
SAVE POINT
GRANT
REVOKE

M t
L lnh thng dng nht, dng ly, xem d liu trong CSDL.
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)
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

o to c bn: SQL v PL/SQL

Trang 8

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


Control Language)

1.7
1.7.1

Gii thiu v v d thc hnh


M hnh quan h d liu

DEPT

EMP

SALGRADE

DUMMY
1.7.2

BONUS

M t d liu
Tn

Kiu

Kho

Gii thch

DEPTNO

NUMBER(2) NOT NULL

PK

M phng ban

DNAME

CHAR(14)

Tn phng ban

LOC

CHAR(13)

a ch

DEPT

SALGRADE
GRADE

NUMBER

LOSAL

NUMBER

PK

Mc lng
Gi tr thp

HISAL

NUMBER

Gi tr cao

EMP
EMPNO

NUMBER(4) NOT NULL,

ENAME

CHAR(10),

JOB

CHAR(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,

o to c bn: SQL v PL/SQL

PK

M nhn vin
Tn nhn vin
Ngh nghip

FK (EMP.EMPNO)

M ngi qun l

Thng
FK (DEPT.DEPTNO)

M phng ban

Trang 9

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

Lnh truy vn c bn

2.1

Lnh truy vn c bn
SELECT [DISTINCT ] {*, column [alias],...}
FROM table;

SELECT
1 column.

tr li cu hi ly d liu no? (column, biu thc...), trong mnh SELECT cn c t nht

FROM

tr li cu hi ly d liu u? (table, view...)

DISTINCT ch nh hin th 1 ln cc d liu trng nhau.

thay cho vic ch tn tt c cc column

alias

a ra nhn ca column hin th d liu.

Vd:
SELECT * FROM emp;
SELECT empno, ename, deptno, mgr FROM emp;
SELECT DISTINCT job nghenghiep FROM emp;

2.2

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. Vd:
SELECT ename, sal *12, comm FROM emp;
SELECT ename, (sal+250)*12 FROM emp;
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 ( ).
Vd: (ANUAL chnh l column alias)
SELECT ename, SAL*12 ANUAL, comm FROM emp;
Cc column c ghp chui
Ton t ghp chui (||) cho php cc column c ni vi nhau thnh dng chui. C th c nhiu ton t
ghp chui trong cng mt column alias. Vd:
SELECT empno||ename EMPLOYEE FROM emp;
SELECT ename || ' co luong la '

|| (sal+250)*12 as "mieu ta"

FROM emp;

Chui t trong nhy n, b danh t trong nhy kp


o to c bn: SQL v PL/SQL

Trang 10

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

Literal
Trong mnh SELECT, literal l bt k k t no, biu thc, hay s np m khng phi l column hoc
column alias. Vd:
SELECT empno||ename EMPLOYEE, WORK IN DEPARTMENT, deptno FROM emp;

2.3

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. Vd:
SELECT ename, sal*12 + comm ANUAL_SAL FROM emp;
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)
V d: 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.4

Lc d liu t cc row c cng gi tr

Mt cu lnh truy vn c th tr v cc row c cng ga tr. Vd:


SELECT JOB FROM EMP;
SELECT DEPTNO FROM EMP;
SELECT JOB, DEPTNO FROM EMP;
o to c bn: SQL v PL/SQL

Trang 11

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

lc ly mt gi tr duy nht ngi ta dng mnh DISTINCT. Mnh ny phi c t trc tt c


cc column, sau mnh SELECT. Vd:
SELECT DISTINCT JOB FROM EMP;
SELECT DISTINCT DEPTNO FROM EMP;
SELECT DISTINCT JOB, DEPTNO FROM EMP;

2.5

Hin th cu trc bng

C php
DESC[RIBE] table_name
(lnh ny ch chy c trn sqlplus, khng chy c trn PL/SQL Develop)
V d:
DESC emp;
Name
Null?
Type
------------------------------- -------- ---EMPNO
NOT NULL NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
MGR
NUMBER(4)
HIREDATE
DATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NUMBER(2)
Kiu d liu NOT NULL ngha l column nht nh phi c gi tr.

2.6

Cc lnh ca cng c SQL*Plus

2.6.1

Cc lnh son tho

Lnh

M t

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

L[IST] n

Lit k dng n

L[IST] m n

Lit k dng m n n

o to c bn: SQL v PL/SQL

Trang 12

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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

2.6.2

Cc lnh v file

Lnh

M t

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

STA[RT] filename [.ext]

Chy cc 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
2.6.3

Thot khi SQL*Plus


Cc lnh v column

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

M t

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

o to c bn: SQL v PL/SQL

Trang 13

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


TRU[NCATED]

Xo chui ti cui dng u tin khi hin th

WRA[PPED]

Ph cui chui ca dng tip theo

WOR[D_WAPPED]

Ging WAP nhng t khng b ct

Lu : cc nh dng hin th ny c lu vo b nh v p dng cho mi ct c tn nh vy, d chng


trong bng no
Vd: Chnh nh dng v nhn ca column
COLUMN ename HEADING Employee|Name FORMAT A15
COLUMN sal JUSTIFY LEFT FORMAT $ 99,990.00
COLUMN hiredate FORMAT A9 NULL Not hired
Vd: Hin th nh dng hin ti ca column
COLUMN
COLUMN ename
Vd: Xo nh dng hin ti ca column
COLUMN ename CLEAR
CLEAR COLUMN
Cc loi nh dng
nh
dng

M t

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

2.7

Bi tp

1. Chn ton b thng tin trong bng SALGRADE


GRADE
LOSAL
HISAL
---------- ---------- ---------1
700
1200
2
1201
1400
3
1401
2000
4
2001
3000
5
3001
9999
2. Chn ton b thng tin trong bng EMP
EMPNO ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
------ ---------- --------- ----- --------- ----- ------ ---------7839 KING
PRESIDENT
17-11-1981 5000
10
7698 BLAKE
MANAGER
7839 01-05-1981 2850
30
7782 CLARK
MANAGER
7839 09-06-1981 2450
10
7566 JONES
MANAGER
7839 02-04-1981 2975
20
o to c bn: SQL v PL/SQL

Trang 14

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


7654 MARTIN
SALESMAN
7499 ALLEN
SALESMAN
7844 TURNER
SALESMAN
7900 JAMES
CLERK
7521 WARD
SALESMAN
7902 FORD
ANALYST
7369 SMITH
CLERK
7788 SCOTT
ANALYST
7876 ADAMS
CLERK
7934 MILLER
CLERK
3. Hin th mi loi ngh nghip

7698
7698
7698
7698
7698
7566
7902
7566
7788
7782

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

1250
1600
1500
950
1250
3000
800
3000
1100
1300

1400
300
0
500

30
30
30
30
30
20
20
20
20
10

JOB
--------ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
4. Hin th tn nhn vin v thu nhp trong mt nm (REMUNERATION)
ENAME
REMUNERATION
---------- -----------KING
60000
BLAKE
34200
CLARK
29400
JONES
35700
MARTIN
16400
ALLEN
19500
TURNER
18000
JAMES
11400
WARD
15500
FORD
36000
SMITH
9600
SCOTT
36000
ADAMS
13200
MILLER
15600
14 rows selected.
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;

o to c bn: SQL v PL/SQL

Trang 15

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


3

Truy vn d liu c iu kin

3.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, SAL*12, DEPTNO
FROM EMP
ORDER BY ENAME;
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 ;
Order nhiu column
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
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.2

Mnh WHERE

C php
SELECT [DISTINCT ] {*, column [alias],...}
FROM table;
[WHERE condition (s)]
[ORDER BY expr/position [DESC/ASC]]
o to c bn: SQL v PL/SQL

Trang 16

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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 ;
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, EMPNO, ENAME, SAL
FROM EMP
WHERE SAL > 1500
AND JOB = MANAGER
OR JOB =SALESMAN;
SELECT DEPTNO, JOB, EMPNO, ENAME, SAL
FROM EMP
WHERE SAL > 1500
AND (JOB = MANAGER
OR JOB =SALESMAN);

3.3

Cc ton t

Ton t so snh

: 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 logic

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

o to c bn: SQL v PL/SQL

Trang 17

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


Cc ton t ca SQL

[NOT] BETWEEN x AND y : [Khng] ln hn hoc bng x v nh hn hoc bng y.

IN (danh sch)

x [NOT] LIKE y
: 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

IS [NOT] NULL

: kim tra gi tr rng

EXISTS

: Tr v TRUE nu c tn ti.

: thuc bt k gi tr no trong danh sch

[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 khng c mnh ESCAPE '\')
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 "\"
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 du
SELECT * FROM emp WHERE comm IS NULL ;

o to c bn: SQL v PL/SQL

Trang 18

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

3.4

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
---------- ---------- ---------ALLEN
30
1600
WARD
30
1250
MARTIN
30
1250
TURNER
30
1500
ADAMS
20
1100
MILLER
10
1300
Sal Between 1000 to 2000
2.Hin th m phng ban, tn phng ban, sp xp theo th t tn phng ban.
DEPTNO
-----10
40
20
30

DNAME
----------ACCOUNTING
OPERATIONS
RESEARCH
SALES

Order by dname
3. Hin th danh sch nhng nhn vin lm ti phng 10 v 20 theo th t A,B,C
EMPNO
---------7876
7782
7902
7566
7839
7934
7788
7369

ENAME
JOB
MGR HIREDATE
SAL COMM DEPTNO
----------------- ----- ---------- ---------- ----- ----ADAMS
CLERK
7788 12-01-1983
1100
20
CLARK
MANAGER
7839 09-06-1981
2450
10
FORD
ANALYST
7566 03-12-1981
3000
20
JONES
MANAGER
7839 02-04-1981
2975
20
KING
PRESIDENT
17-11-1981
5000
10
MILLER CLERK
7782 23-01-1982
1300
10
SCOTT
ANALYST
7566 09-12-1982
3000
20
SMITH
CLERK
7902 17-12-1980
800
20

Where deptno in (10,20) order by ename asc


4. Hin th tn v ngh nghip nhng nhn vin lm ngh th k (clerk) ti phng 20.
ENAME
---------SMITH
ADAMS

JOB
--------CLERK
CLERK

Where upper(job)= upper('clerk') and deptno = '20';

(lu vn ch Hoa-thng)

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


ENAME
---------SMITH
ALLEN
MILLER
Where ename like %TH% or ename like %LL%
6. Hin th tn nhn vin, ngh nghip, lng ca nhng nhn vin c gim c qun l.
ENAME
---------SMITH
ALLEN
WARD
JONES

JOB
SAL
--------- ---------CLERK
800
SALESMAN
1600
SALESMAN
1250
MANAGER
2975

o to c bn: SQL v PL/SQL

Trang 19

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

SALESMAN
MANAGER
MANAGER
ANALYST
SALESMAN
CLERK
CLERK
ANALYST
CLERK

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
Where to_char(hiredate) like %83
Where hiredate like %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
COMM
---------- ---------19200
300
18000
0
15000
500

4.1

Cc hm p dng cho 1 dng d liu

Cc hm s

u vo v u ra l cc gi tr kiu s
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

= Format(dl, 99999,00)

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:


LOG(m,n)

cho logarit c s m ca n

o to c bn: SQL v PL/SQL

=
Trang 20

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


SIN(n)

cosin ca n (n tnh bng radian)

COS(n)

cho cosin ca n (n tnh bng radian)

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
5
0
4.92
V d hm TRUNC(n[,m])
SELECT TRUNC
TRUNC
TRUNC
TRUNC
FROM DUMMY;

(4.923,1),
(4.923),
(4.923,-1),
(4.923,2)

TRUNC(4.923,1) TRUNC(4.923) TRUNC(4.923,-1) TRUNC(4.923,2)


-------------- ------------ --------------- -------------4.9
4
0
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
100
102
-11
3000
100
102
-11
3000
100
102
-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
99
101
-12
3000
99
101
-12
3000
99
101
-12
V d hm POWER(m,n)
SELECT SAL, POWER(SAL,2), POWER(SAL,3), POWER(50,5)
FROM EMP
WHERE DEPTNO =10;
SAL POWER(SAL,2) POWER(SAL,3) POWER(50,5)
---------- ------------ ------------ ----------5000
25000000
1.2500E+11
312500000
2450
6002500
1.4706E+10
312500000
1300
1690000
2197000000
312500000
V d hm EXP(n)
SELECT EXP(4) FROM DUMMY;
EXP(4)
o to c bn: SQL v PL/SQL

Trang 21

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


---------54.59815
V d hm SQRT(n)
SELECT SAL, SQRT(SAL), SQRT(40), SQRT (COMM)
FROM EMP
WHERE DEPTNO =10;
SAL
---------5000
2450
1300

SQRT(SAL)
---------70.7106781
49.4974747
36.0555128

SQRT(40) SQRT(COMM)
---------- ---------6.32455532
6.32455532
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
1
-2850
-1
-150
-1
150
1
1300
1
-1300
-1
1500
1
-1500
-1
950
1
-950
-1
750
1
-750
-1

4.2

Cc hm k t

CONCAT(char1, char2)

cho kt hp ca 2 chui k t, tng t nh s dng ton t ||

INITCAP(char)

cho chui vi k t u cc t l k t hoa

LOWER(char)

cho chui k t vit thng (khng vit hoa)

LPAD(char1, n [,char2])

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 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[,replacement_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

o to c bn: SQL v PL/SQL

Trang 22

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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)
-------------accounting
research
sales
operations

LOWER('SQL
---------sql course
sql course
sql course
sql 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)
-------------Accounting
Research
Sales
Operations

INITCAP(LOC)
------------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)
LPAD(DEPTNO,20,'')
-------------------- -------------------- -------------------******ACCOUNTING
ACCOUNTING
10
******RESEARCH
RESEARCH
20
******SALES
SALES
30
******OPERATIONS
OPERATIONS
40
V d hm RPAD(char1, n [,char2])
SELECT RPAD(DNAME,20,*), RPAD(DNAME,20), RPAD(DEptno,20, )
FROM DEPT;

o to c bn: SQL v PL/SQL

Trang 23

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


RPAD(DNAME,20,'*')
-------------------ACCOUNTING
******
RESEARCH
******
SALES
******
OPERATIONS
******

RPAD(DNAME,20)
-------------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

RPAD(DEPTNO,20,'')
-------------------10
20
30
40

V d hm SUBSTR(char, m [,n])
SELECT SUBSTR(ORACLE,2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5)
FROM DEPT;
SUBS
---RACL
RACL
RACL
RACL

SUBSTR(DNAME,
------------CCOUNTING
ESEARCH
ALES
PERATIONS

SUBST
----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
INSTR(DNAME,'A') INSTR(DNAME,'ES') INSTR(DNAME,'C',1,2)
-------------- ---------------- ----------------- -------------------ACCOUNTING
1
0
3
RESEARCH
5
2
0
SALES
2
4
0
OPERATIONS
5
0
0
V d hm LTRIM(char1, n [,char2])
SELECT DNAME, LTRIM(DNAME,A), LTRIM(DNAME,AS),
LTRIM(DNAME,ASOP)
FROM DEPT;
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

LTRIM(DNAME,'A
-------------CCOUNTING
RESEARCH
SALES
OPERATIONS

LTRIM(DNAME,'A
-------------CCOUNTING
RESEARCH
LES
OPERATIONS

LTRIM(DNAME,'A
-------------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
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

RTRIM(DNAME,'A
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

RTRIM(DNAME,'A
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

RTRIM(DNAME,'A
-------------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 COURSE), LENGTH(DEPTNO), LENGTH(DNAME) FROM DEPT;
o to c bn: SQL v PL/SQL

Trang 24

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

o to c bn: SQL v PL/SQL

Trang 25

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


LENGTH('SQLCOURSE') LENGTH(DEPTNO) LENGTH(DNAME)
------------------- -------------- ------------10
2
14
10
2
14
10
2
14
10
2
14
V d hm TRANSLATE(char, from, to)
SELECT ENAME, TRANSLATE(ENAME,'C','F'), JOB,
TRANSLATE(JOB,'AR','IT')
FROM EMP
WHERE DEPTNO = 10;
ENAME
---------KING
CLARK
MILLER

TRANSLATE(
---------KING
FLARK
MILLER

JOB
--------PRESIDENT
MANAGER
CLERK

TRANSLATE
--------PTESIDENT
MINIGET
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
--------MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
SALESMAN
ANALYST
CLERK
ANALYST
CLERK

REPLACE(JOB,'SALESMAN',
----------------------MANAGER
MANAGER
SALESPERSON
SALESPERSON
SALESPERSON
CLERK
SALESPERSON
ANALYST
CLERK
ANALYST
CLERK

ENAME
--------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
14
14
RESEARCH
14
13
SALES
14
12
OPERATIONS
14
13

4.3

Cc hm ngy

MONTH_BETWEEN(d1, d2) cho bit s thng gia ngy d1 v d2.


ADD_MONTHS(d,n)

cho ngy d thm n thng.

NEXT_DAY(d, char )

cho ngy tip theo ngy d c th ch bi char.

LAST_DAY(d)

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')
o to c bn: SQL v PL/SQL

Trang 26

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


FROM EMP
WHERE MONTHS_BETWEEN( SYSDATE,HIREDATE)>240;
MONTHS_BETWEEN(SYSDATE,HIREDATE) TWEEN('01-01-2000','05-10-2000')
-------------------------------- -------------------------------241.271055
-9.1290323
241.206539
-9.1290323
243.367829
-9.1290323
V d hm ADD_MONTHS(d,n)
SELECT HIREDATE, ADD_MONTHS(HIRE,3), ADD_MONTHS(HIREDATE,-3)
FROM EMP
WHERE DEPTNO=20;
HIREDATE
---------02-04-1981
03-12-1981
17-12-1980
09-12-1982
12-01-1983

ADD_MONTHS
---------02-07-1981
03-03-1982
17-03-1981
09-03-1983
12-04-1983

ADD_MONTHS
---------02-01-1981
03-09-1981
17-09-1980
09-09-1982
12-10-1982

V d hm NEXT_DAY(d, char )
SELECT HIREDATE, NEXT_DAY(HIREDATE,FRIDAY), NEXT_DAY(HIREDATE,6)
FROM EMP
WHERE DEPTNO = 10;
HIREDATE
---------17-11-1981
09-06-1981
23-01-1982

NEXT_DAY(H
---------20-11-1981
12-06-1981
29-01-1982

NEXT_DAY(H
---------20-11-1981
12-06-1981
29-01-1982

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

LAST_DAY(S
---------31-03-2001
31-03-2001
31-03-2001
31-03-2001
31-03-2001

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

LAST_DAY(H
---------30-04-1981
31-12-1981
31-12-1980
31-12-1982
31-01-1983

LAST_DAY('
---------31-01-2001
31-01-2001
31-01-2001
31-01-2001
31-01-2001

Mt s hm khc c th p dng cho kiu ngy:


ROUND(date1)

tr v ngy date 1 ti thi im gia tra 12:00 AM

ROUND(date1,MONTH)

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.

ROUND(date1,YEAR)

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.

TRUNC(date1, MONTH) Tr v ngy u tin ca thng cha date1


TRUNC(date1, YEAR)

o to c bn: SQL v PL/SQL

Tr v ngy u tin ca nm cha date1

Trang 27

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

4.4

Cc hm chuyn i kiu

TO_CHAR(number|date, fmt)

Chuyn kiu s v ngy v kiu k t.

TO_NUMBER(char)

Chuyn k t c ni dung s sang s

TO_DATE(chsr,fmt)

Chuyn k t sang kiu ngy vi nh dng t trong fmt.

DECODE(EXPR, SEARCH1, RESULT1, SEARCH2, RESULT2, DEFAULT):


So snh biu thc expr vi gi tr search nu ng tr v gi tr
result nu khng tr v gi tr default.
NVL(COL|VALUE, VAL)

Chuyn gi tr COL|VALUE thnh val nu null.

Greatest(col|value1, col|value2) Tr gi tr ln nht trong dy gi tr.

Vd:
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) DECODD_JOB
FROM EMP;
SELECT GREATEST(1000,2000), GREATEST(SAL,COMM) FROM EMP
WHERE DEPTNO = 10;
Mt s khun dng ngy
SCC hoc CC
YYYY hoc SYYYY
YYY, YY, Y
IYYY, IYY, IY, I
SYEAR, YEAR
Q
MM
MONTH
MON
WW, W
DDD, DD, D
DAY
DY
J
AM, PM
HH, HH12 HH24
MI
SS
SSSSS
/ . , char
TH
SP
o to c bn: SQL v PL/SQL

th k; S ch ngy BC
nm; S ch ngy BC
Ch nm vi 3,2,1 k t s
Ch nm theo chun ISO
Ch nm theo cch pht m ca ngi anh;
Qu trong nm
Gi tr thng vi 2 s (01-12)
Tn y ca thng theo ting anh, di 9
Thng vi 3 k t vin tt (JAN, FEB...)
Tun trong nm hoc trong thng
Ngy trong nm, thng hoc tun
Ch th trong tun
Ch th trong tun vi 3 k t vit tt
Ngy Julian; bt u t ngy 31/12/4713 trc cng
nguyn
Ch nh sng, chiu
Ch gi trong ngy (1-12) hoc (0-23)
Pht (0-59)
Giy (0-59)
S giy n na m (0-86399)
c t ng thm khi t trong khun dng
on k t t trong nhy p c t ng thm khi t
trong khun dng
Thm phn th t (1st, 2nd, 4th )
Pht m s ( FOUR vi DDSP)
Trang 28

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


SPTH, THSP

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


...)
Ngy chuyn giao thin nin k vi cc nm <1999.
Nm
0-49
50-99

RR

Nm hin
ti

0-49
50-99

th k hin
ti
Th k trc

Th k
sau
Th k
hin ti

Mt s khun dng s
K
t
9
0
$
L
.
,
MI
PR
EEE
V
B

4.5

M t

V d

Kt qu

Xc nh hin th 1 s
Hin th c s 0 u nu
di khun dng ln hn s
hin c
Thm k t tin t
Thm k t tin t bn a
Du thp phn
Du phn cch phn nghn
Du m bn phi ( vi cc
gi tr m)
Thm ngoc nhn vo cc gi
tr m
Chuyn sang hin th s E
Nhn vi 10 n, n l s cc s
9 t sau V
Hin th c gi tr 0 nu =
0.

999999
099999

1234
001234

$999999
L999999
999999.99
999,999
999999MI

$1234
FF1234
1234.00
1,234
1234-

999999PR

<1234>

99.9999RRRR
9999V99

1.234E+03
123400

B9999.99

1234.00

Bi tp

1. Lit k tn nhn vin, m phng ban v lng nhn vin c tng 15% (PCTSAL).
DEPTNO
---------10
30
10
20
30
30
30
30
30
20
20
20
20
10

ENAME
PCTSAL
---------- ---------KING
5000
BLAKE
2850
CLARK
2450
JONES
2975
MARTIN
1250
ALLEN
1600
TURNER
1500
JAMES
950
WARD
1250
FORD
3000
SMITH
800
SCOTT
3000
ADAMS
1100
MILLER
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
o to c bn: SQL v PL/SQL

Trang 29

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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
30 Manager
MARTIN
30 Salesperson
ALLEN
30 Salesperson
TURNER
30 Salesperson
JAMES
30 Clerk
WARD
30 Salesperson
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
---------JONES
FORD
SMITH
SCOTT
ADAMS

DATE_HIRED
-------------------------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
---------SMITH
ALLEN
WARD
JONES
BLAKE
CLARK
TURNER
MARTIN
KING
JAMES
FORD
MILLER
SCOTT
ADAMS

HIREDATE
---------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

REVIEW
---------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


o to c bn: SQL v PL/SQL

Trang 30

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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

SALARY
-----------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?
----- ------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.

Bin runtime

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
SELECT * FROM emp
WHERE &Condition
Enter value for condition: sal > 1000
Khi y cu lnh trn tng ng
SELECT * FROM emp
WHERE sal > 1000
V du 2:
Select ename, deptno, job
From emp
Where deptno = &&depno_please;
Lnh Define
Khai bo v gn tr cho cc bin, v d khai bo bin condition c tri 'sal > 1000'
DEFINE condition = 'sal > 1000'
Khi cu lnh sau khng yu cu nhp vo gi tr cho codition
SELECT * FROM emp
WHERE &Condition
o to c bn: SQL v PL/SQL

Trang 31

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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;
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 : ******

5.1

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

6.1

Cc hm nhm p dng cho ln hn hoc bng 1 dng d liu

Cc hm tc ng trn nhm

Cc hm tc ng trn nhm cc dng d liu tc ng ln mt tp hp cc cc dng d liu. Gm cc


hm:
AVG([DISTINCT/ALL] n)

Gi tr trung bnh ca n,khng k tr null

COUNT([DISTINCT/ALL] expr) S row c expr khc null


MAX([DISTINCT/ALL] expr)

Gi tr ln nht ca expr

MIN([DISTINCT/ALL] expr)

Gi tr nh nht ca expr

STDDVE([DISTINCT/ALL] n)

Phng sai ca n khng k tr null

o to c bn: SQL v PL/SQL

Trang 32

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


SUM([DISTINCT/ALL] n)

Tng ca ca n khng k tr null

VARIANCE([DISTINCT/ALL] n) 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]

o to c bn: SQL v PL/SQL

Trang 33

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

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


Select AVG(SAL)
FROM EMP:
/Tnh mc lng trung bnh ca ton b nhn vin /
Select MIN(SAL)
FROM EMP
WHERE JOB =CLERK:
/Tnh mc lng thp nht ca nhn vin lm ngh CLERK /
V d tc ng trn mt nhm d liu cng tnh cht ca cu lnh truy vn.
SELECT JOB, AVG(SAL)
FROM EMP
GROUP BY JOB;
/ Tnh mc lng trung bnh ca tng loi ngh nghip/
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;
Sai: SELECT MAX(SAL), JOB FROM EMP;

6.2

Mnh GROUP BY

C php:
SELECT [DISTINCT ] {*, column [alias],...}
FROM table;
[WHERE condition]
[GROUP BY expr]
[HAVING
[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
MAX(SAL)
--------- ---------ANALYST
3000
CLERK
1300
PRESIDENT
5000
SALESMAN
1600
SELECT JOB, MAX(SAL)
FROM EMP
GROUP BY JOB
HAVING COUNT(*)>3;
JOB
MAX(SAL)
--------- ---------CLERK
1300
SALESMAN
1600
SELECT JOB, MAX(SAL)
FROM EMP
o to c bn: SQL v PL/SQL

Trang 34

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


HAVING MAX(SAL)>=3000
GROUP BY JOB;
JOB
MAX(SAL)
--------- ---------ANALYST
3000
PRESIDENT
5000

6.3

Bi tp

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.

7.1

Hin th ni dung d liu t nhiu bng

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.


Vd: 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..
Vd:
SELECT DEPT.DEPTNO, ENAME,JOB, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY DEPT.DEPTNO;
SELECT A.DEPTNO, A.ENAME, A.JOB, B.DNAME
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
ORDER BY A.DEPTNO;

7.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.
Vd: 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..
VD:
SELECT E.ENAME,E.JOB, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S. LOSAL AND S.HISAL;

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


o to c bn: SQL v PL/SQL

Trang 35

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

7.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

Trong mnh WHERE ca mi lin kt cng khng c dng ton t IN hoc OR ni cc iu


kin lin kt khc.
Vd:
SELECT E.ENAME, D.DEPTNO, D.DNAME
FROM
EMP E, DEPT D
WHERE E.DEPTNO (+)=D.DEPTNO
AND
D.DEPTNO IN (30, 40);
ENAME
DEPTNO DNAME
---------- ---------- ------------BLAKE
30 SALES
MARTIN
30 SALES
ALLEN
30 SALES
TURNER
30 SALES
JAMES
30 SALES
WARD
30 SALES
40 OPERATIONS

7.4

Lin kt ca bng vi chnh n

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
EMP_SAL MGR_NAME
MGR_SAL
---------- ---------- ---------- ---------BLAKE
2850 KING
5000
CLARK
2450 KING
5000
JONES
2975 KING
5000
MARTIN
1250 BLAKE
2850
ALLEN
1600 BLAKE
2850
TURNER
1500 BLAKE
2850
JAMES
950 BLAKE
2850
WARD
1250 BLAKE
2850
SMITH
800 FORD
3000
ADAMS
1100 SCOTT
3000
MILLER
1300 CLARK
2450

7.5

Cc ton t tp hp

UNION

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)

Vd:
Select job from emp where deptno = 10
Union
Select job from emp where deptno = 30;
o to c bn: SQL v PL/SQL

Trang 36

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

JOB
--------CLERK
MANAGER
PRESIDENT
SALESMAN

7.6

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
---------KING
BLAKE
CLARK
JONES
ALLEN
FORD
SCOTT

LOC
------------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
DALLAS
DALLAS

DNAME
----------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
SALES
RESEARCH
RESEARCH

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


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

JOB
SAL
GRADE
--------- ---------- ---------CLERK
950
1
CLERK
800
1
CLERK
1100
1
SALESMAN
1250
2
SALESMAN
1250
2
CLERK
1300
2
SALESMAN
1600
3
SALESMAN
1500
3
MANAGER
2850
4
MANAGER
2450
4
MANAGER
2975
4
ANALYST
3000
4
ANALYST
3000
4
PRESIDENT
5000
5

4. Hin th tn nhn vin, ngh nghip, lng v mc lng, vi iu kin mc lng = 3.


ENAME
---------ALLEN
TURNER

JOB
SAL
GRADE
--------- ---------- ---------SALESMAN
1600
3
SALESMAN
1500
3

5. Hin th nhng nhn vin ti DALLAS


ENAME
---------JONES
FORD
SMITH
SCOTT
ADAMS

LOC
SAL
------------- ---------DALLAS
2975
DALLAS
3000
DALLAS
800
DALLAS
3000
DALLAS
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
---------MARTIN
WARD
ALLEN
TURNER

JOB
SAL
GRADE DNAME
--------- ---------- ---------- -------------SALESMAN
1250
2 SALES
SALESMAN
1250
2 SALES
SALESMAN
1600
3 SALES
SALESMAN
1500
3 SALES

o to c bn: SQL v PL/SQL

Trang 37

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


BLAKE
CLARK
JONES
FORD
SCOTT
KING

MANAGER
MANAGER
MANAGER
ANALYST
ANALYST
PRESIDENT

2850
2450
2975
3000
3000
5000

4
4
4
4
4
5

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
---------JAMES
SMITH
ADAMS
MILLER
FORD
SCOTT

JOB
ANUAL_SAL DNAME
GRADE
--------- ---------- -------------- ---------CLERK
11400 SALES
1
CLERK
9600 RESEARCH
1
CLERK
13200 RESEARCH
1
CLERK
15600 ACCOUNTING
2
ANALYST
36000 RESEARCH
4
ANALYST
36000 RESEARCH
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
EMP_SAL MGR_NAME
MGR_SAL
---------- ---------- ---------- ---------BLAKE
2850 KING
5000
CLARK
2450 KING
5000
JONES
2975 KING
5000
MARTIN
1250 BLAKE
2850
ALLEN
1600 BLAKE
2850
TURNER
1500 BLAKE
2850
JAMES
950 BLAKE
2850
WARD
1250 BLAKE
2850
FORD
3000 JONES
2975
SMITH
800 FORD
3000
SCOTT
3000 JONES
2975
ADAMS
1100 SCOTT
3000
MILLER
1300 CLARK
2450
10. Nh cu 9 hin th thm thng tin v ng KING.
EMP_NAME
EMP_SAL MGR_NAME
MGR_SAL
---------- ---------- ---------- ---------KING
5000
BLAKE
2850 KING
5000
CLARK
2450 KING
5000
JONES
2975 KING
5000
MARTIN
1250 BLAKE
2850
ALLEN
1600 BLAKE
2850
TURNER
1500 BLAKE
2850
JAMES
950 BLAKE
2850
WARD
1250 BLAKE
2850
FORD
3000 JONES
2975
SMITH
800 FORD
3000
SCOTT
3000 JONES
2975
ADAMS
1100 SCOTT
3000
MILLER
1300 CLARK
2450

EMP_NAME

EMP_SAL MGR_NAME

o to c bn: SQL v PL/SQL

MGR_SAL
Trang 38

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


---------- ---------- ---------- ---------BLAKE
2850 BLAKE
2850
MARTIN
1250 BLAKE
2850
ALLEN
1600 BLAKE
2850
TURNER
1500 BLAKE
2850
JAMES
950 BLAKE
2850
WARD
1250 BLAKE
2850
CLARK
2450 CLARK
2450
MILLER
1300 CLARK
2450
JONES
2975 JONES
2975
FORD
3000 JONES
2975
SMITH
800 JONES
2975
SCOTT
3000 JONES
2975
ADAMS
1100 JONES
2975
13 rows selected.
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.

Cc lnh truy vn lng nhau

8.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
---------BLAKE
CLARK
JONES

JOB
-------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
Ton t SOME/ANY/ALL/NOT IN/EXITS
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
o to c bn: SQL v PL/SQL

Trang 39

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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)

ORDER BY SAL DESC;

SELECT EMPNO, ENAME, JOB, DEPTNO


FROM EMP E
WHERE

EXISTS (

SELECT EMPNO
FROM EMP
WHERE EMP.MGR = E.EMPNO);
/Tm nhng ngi c nhn vin/

8.2
9

Bi tp
Cu trc hnh cy

9.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.

KING

EMPNO = 7839
Mgr =7839

CLARK

JONES

BLAKE

MILER SCOTT FORD ALLEN WARD MARTIN TUNNER

ADAMS

o to c bn: SQL v PL/SQL

JAMES

SMITH

Trang 40

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

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
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
EMPNO ENAME
---------- ---------- ---------- ---------1
10
7839 KING
2
30
7698 BLAKE
3
30
7654 MARTIN
3
30
7499 ALLEN
3
30
7844 TURNER
3
30
7900 JAMES
3
30
7521 WARD
2
10
7782 CLARK
3
10
7934 MILLER
2
20
7566 JONES
3
20
7902 FORD
4
20
7369 SMITH
3
20
7788 SCOTT
4
20
7876 ADAMS

9.2

JOB
SAL
--------- ---------PRESIDENT
5000
MANAGER
2850
SALESMAN
1250
SALESMAN
1600
SALESMAN
1500
CLERK
950
SALESMAN
1250
MANAGER
2450
CLERK
1300
MANAGER
2975
ANALYST
3000
CLERK
800
SALEMAN
3300
CLERK
1100

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]
[ORDER BY expr/position [DESC/ASC]]
Trong :

START WITH

c t im u ca hnh cy. Khng th column gi level mnh ny.

CONNECT BY Ch column trong mi lin h tnh cy.

PRIOR
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;

o to c bn: SQL v PL/SQL

Trang 41

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


LEVEL
DEPTNO
EMPNO ENAME
---------- ---------- ---------- ---------1
20
7876 ADAMS
2
20
7788 SCOTT
3
20
7566 JONES
4
10
7839 KING

JOB
SAL
--------- ---------CLERK
1100
SALEMAN
3300
MANAGER
2975
PRESIDENT
5000

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
EMPNO ENAME
---------- ---------- ---------- ---------1
10
7839 KING
2
30
7698 BLAKE
3
30
7654 MARTIN
3
30
7499 ALLEN
3
30
7844 TURNER
3
30
7900 JAMES
3
30
7521 WARD
2
10
7782 CLARK
3
10
7934 MILLER
2
20
7566 JONES
3
20
7902 FORD
4
20
7369 SMITH
4
20
7876 ADAMS

JOB
SAL
--------- ---------PRESIDENT
5000
MANAGER
2850
SALESMAN
1250
SALESMAN
1600
SALESMAN
1500
CLERK
950
SALESMAN
1250
MANAGER
2450
CLERK
1300
MANAGER
2975
ANALYST
3000
CLERK
800
CLERK
1100

2.
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP
CONNECT BY PRIOR EMPNO = MGR AND ENAME != SCOTT
START WITH MGR IS NULL;
LEVEL
DEPTNO
EMPNO ENAME
---------- ---------- ---------- ---------1
10
7839 KING
2
30
7698 BLAKE
3
30
7654 MARTIN
3
30
7499 ALLEN
3
30
7844 TURNER
3
30
7900 JAMES
3
30
7521 WARD
2
10
7782 CLARK
3
10
7934 MILLER
2
20
7566 JONES
3
20
7902 FORD
4
20
7369 SMITH

9.3

JOB
SAL
--------- ---------PRESIDENT
5000
MANAGER
2850
SALESMAN
1250
SALESMAN
1600
SALESMAN
1500
CLERK
950
SALESMAN
1250
MANAGER
2450
CLERK
1300
MANAGER
2975
ANALYST
3000
CLERK
800

Bi tp

1. 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
MGR_SAL
---------- ---------- ---------- ---------BLAKE
2850 BLAKE
2850
MARTIN
1250 BLAKE
2850
ALLEN
1600 BLAKE
2850
TURNER
1500 BLAKE
2850
JAMES
950 BLAKE
2850
o to c bn: SQL v PL/SQL

Trang 42

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


WARD
CLARK
MILLER
JONES
FORD
SMITH
SCOTT
ADAMS

1250
2450
1300
2975
3000
800
3300
1100

BLAKE
CLARK
CLARK
JONES
JONES
JONES
JONES
JONES

2850
2450
2450
2975
2975
2975
2975
2975

13 rows selected.
2. Tm nhng nhn vin kim c lng cao nht trong mi loi ngh nghip.
JOB
MAX(SAL)
--------- --------ANALYST
3000
CLERK
1300
MANAGER
2975
PRESIDENT
5000
SALESMAN
1600
3. Tm mc lng cao nht trong mi phng ban, sp xp theo th t phng ban.
ENAME
---------KING
SCOTT
BLAKE

JOB
DEPTNO
SAL
--------- ---------- ---------PRESIDENT
10
5000
SALEMAN
20
3300
MANAGER
30
2850

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


ENAME
---------CLARK
SMITH
ALLEN

HIREDATE
DEPTNO
---------- ---------09-06-1981
10
17-12-1980
20
20-02-1981
30

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


EMPNO
---------7839
7566
7902
7788
7698
7499

ENAME
SAL
DEPTNO
---------- ---------- ---------KING
5000
10
JONES
2975
20
FORD
3000
20
SCOTT
3300
20
BLAKE
2850
30
ALLEN
1600
30

6. 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
---------7698
7654
7499
7844
7900
7521
7782
7934
7566
7902
7369
7788
7876

EMP_NAME EMP_SAL MGR_NUMBER MGR_NAME


MGR_DEPT MGR_GRADE
--------------- ---------- ---------- ---------- ---------BLAKE
2850
7698 BLAKE
30
4
MARTIN
1250
7698 BLAKE
30
4
ALLEN
1600
7698 BLAKE
30
4
TURNER
1500
7698 BLAKE
30
4
JAMES
950
7698 BLAKE
30
4
WARD
1250
7698 BLAKE
30
4
CLARK
2450
7782 CLARK
10
4
MILLER
1300
7782 CLARK
10
4
JONES
2975
7566 JONES
20
4
FORD
3000
7566 JONES
20
4
SMITH
800
7566 JONES
20
4
SCOTT
3300
7566 JONES
20
4
ADAMS
1100
7566 JONES
20
4

13 rows selected.

o to c bn: SQL v PL/SQL

Trang 43

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


10 Tng kt v lnh select
Cu trc lnh
SELECT [DISTINCT/ALL] [expr [c_ias]]
FROM [table/view/snapshot] [t_alias]
[WHERE condition]
[START WITH condition CONNECT BY condition]
[GROUP BY expr] [HAVING condition]
[UNION/UNION ALL/INTERSET/MINUS select command]
[ORDER BY expr/position [DESC/ASC]]
[FOR UPDATE OF [column]]
[NOTWAIT]
Cc thnh phn trong cu lnh SELECT
DISTINCT
ALL
*

Ch chn 1 cho cc row ging nhau trong kt qu


Kt xut c cc row ging nhau
Chn tt c cc column trong table, view... table.*,
view.*, snapshot.*
Chn tt c cc ct trong table, view hay snapshot c
ch nh
expr
Chn cc biu thc
c_alias
Tn ct trong kt qu kt xut. table, view, snapshot l
Tn table, view hay snapshot
subquery
Cu hi select con
t_alias
Tn cho cc table
WHERE
Chn cc row tha iu kin trong mnh WHERE
START WITH,CONNECT BY
Chn cc dng trong th t tha k
GROUP BY
Nhm cc dng c expr ging nhau
HAVING
Chn nhng nhm tha iu kin mnh HAVING
UNION, UNION ALL, INTERSET, MINUS
Cho kt qu kt hp cc ton t tp
hp
ORDER BY
Xp th t cc row theo expr hay position (trong danh
sch select)
ASC, DESC
Trt t xui (mc nhin) hay ngc
FOR UPDATE
Kha nhng row c chn, cho bit bn c nh xa hay
cp nht cc row ny
NOTWAIT
Tr quyn iu khin nu khi mun lock row b lock
bi user khc.

11 To table

11.1 Lnh to bng


to mt bng mi dng lnh CREATE TABLE, C php nh sau:
CREATE TABLE tablename
(column [datatype][DEFAULT expr][column_constraint]..) [table_constraint])
[PCTFREE integer][PCTUSED integer]
[INITRANS integer][MAXTRANS integer]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[AS subquery]
Trong :
tablename
column
[datatype]
[DEFAULT expr]
[column_constraint]
[table_constraint]
[PCTFREE integer]
[PCTUSED integer]
[INITRANS integer]
[MAXTRANS integer]
o to c bn: SQL v PL/SQL

: 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
: % trng
: % s dng
: S bn ghi khi to
: S bn ghi ln nht
Trang 44

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


[TABLESPACE tablespace] : Ch nh TABLESAPCE cho bng
[STORAGE storage_clause] : 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.
[AS subquery]
: 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
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

CONSTRAINT

V du 2
CREATE TABLE SALGRADE1
(GRADE NUMBER CONSTRAINT PK_SALGRADE PRIMARY KEY,
LOSAL NUMBER,
HISAL NUMBER)
TABLESPACE USER
STORAGE (INITIAL 6144 NEXT 6144
MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5)
V d 3
CREATE TABLE DEPT10
AS
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP WHERE DEPTNO =10;
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.

Tnh ton kch thc table (tham kho):


o to c bn: SQL v PL/SQL

Trang 45

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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.
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

11.2 Cc 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
o to c bn: SQL v PL/SQL

Trang 46

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

11.3 Cc 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

schema

Schema cha object

part

Thnh phn ca object

dblink

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.

11.4 Kiu d liu v iu kin


11.4.1 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
o to c bn: SQL v PL/SQL

Trang 47

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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
11.4.2 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 mc tin di hn chiu di ti a ch nh i
vi kiu VARCHAR2. Chiu di ti a kiu VARCHAR2 l 2000 byte
11.4.3 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.
11.4.4 NUMBER
Kiu s ca ORACLE dng cha cc mc tin dng s dng, s m, s vi du chm ng.
NUMBER(p, s) trong
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

Kiu

Lu tr

7456123.89

NUMBER

7456123.89

7456123.89

NUMBER(9)

7456123

7456123.89

NUMBER(9,2)

7456123.89

7456123.89

NUMBER(9,1)

7456123.8

7456123.89

NUMBER(6)

Khng hp l

7456123.8

NUMBER(15,1)

7456123.8

7456123.89

NUMBER(7,-2)

7456100

7456123.89

NUMBER(-7,2)

Khng hp l

11.4.5 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

o to c bn: SQL v PL/SQL

Trang 48

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


11.4.6 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

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

11.4.7 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
o to c bn: SQL v PL/SQL

Trang 49

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


SELECT TO_CHAR (TO_DATE('01-01-1992', 'MM-DD-YYYY'), 'J') JULIAN FROM DUAL
Cho kt qu
JULIAN
----------------------------------------------2448623
11.4.8 RAW v 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.
11.4.9 ROWID
Mi mu tin trong CSDL c mt a ch c kiu ROWID. ROWID gm
block.row.file, trong
block : chui h hexa cho bit block cha row
row : chui h hexa cho bit row trong block
file

: 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.
11.4.10 MLSLABEL
Kiu MLSLABEL dng cha label dng nh phn m ORACLE dng m bo hot ng ca bn thn
h thng.
11.4.11 Chuyn i kiu
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'
o to c bn: SQL v PL/SQL

Trang 50

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh 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

Chuyn sang kiu s

TO_CHAR

Chuyn sang kiu k t

TO_DATE

Chuyn sang kiu ngy

(xem phn tra cu cc hm v th tc)

11.5 Constraint
Cc dng constraint gm:
-

NULL/NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY ( Referential )
CHECK

NULL/NOT NULL: rng buc column trng hoc khng trng, trong 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));
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. Vd:
CREATE TABLE DEPT (
DEPTNO
NUMBER(2),
DNAME
CHAR(14),
LOC
CHAR(13),
CONSTRAINT UNQ_DEPT_LOC UNIQUE(DNAME, LOC));
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 NOTT NULL.
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
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).
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
UPPER_ENAME CHECK (ENAME = UPPER(ENAME)),
o to c bn: SQL v PL/SQL

CONSTRAINT
Trang 51

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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);

11.6 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
NUMBER
4
P_DESC
VARCHAR2
20
P_START_DATE
DATE
P_END_DATE
DATE
BUDGET_AMOUNT NUMBER
7,2
MAX_NO_STAFF
NUMBER
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
NUMBER
4
NOT NULL
EMPNO
NUMBER
4
NOT NULL
A_START_DATE
DATE
A_END_DATE
DATE
BILL_AMOUNT
NUMBER
4,2
ASSIGN_TYPE
VARCHAR2
2

12 cc lnh DDL khc v d liu trong t in d liu

12.1 Chnh sa cu trc table


Dng lnh ALTER TABLE chnh sa cu trc bng. C php nh sau:
ALTER TABLE tablename [ADD/MODIFY/DROP options ([column [column constraint)
[ENABLE clause] [DISABLE clause]
Trong :
ADD: thm column hay constraint.
MODIFY: sa i kiu cc column
DROP: b constraint.
ENABLE/DISABLE: Che khut hoc a vo s dng cc CONSTRAINT m khng xa
hn
Ch :

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.

o to c bn: SQL v PL/SQL

Trang 52

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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 emp_mgr;
ALTER TABLE DROP PRIMARY KEY;
V d 4
ALTER TABLE dept DISABLE CONSTRAINT dept_prim;

12.2 Cc lnh DDL khc


12.2.1 Xa table
Dng lnh DROP TABLE xo bng. C php nh sau:
DROP TABLE table_name [CASCADE CONSTRAINTS]
Trong :
Option CASCADE 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

12.2.2 Gii thch bng


Dng lnh COMMENT ch thch. V d
COMMENT ON TABLE EMP IS THONG TIN NHAN VIEN;
COMMENT ON COLUMN EMP.EMPNO IS MA SO NHAN VIEN;
12.2.3 Thay i tn object
Dng lnh RENAME thay i tn object. C php nh sau:
RENAME old TO new
Trong :
Old: Tn c
New: tn mi
V d
RENAME emp TO employee
12.2.4 Xa d liu ca table
Dng lnh TRUNCATE TABLE xa d liu ca table, xa tt c cc row trong table. C php nh sau:
TRUNCATE TABLE table_name [REUSE STORAGE]
Trong :
o to c bn: SQL v PL/SQL

Trang 53

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


Option REUSE STORAGE gi li khung cha, ch xa d liu

12.3 D liu 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;
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;

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

o to c bn: SQL v PL/SQL

Trang 54

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


13 Cc lnh Thao tc d liu khc

13.1 Chn mt row vo table


chn mt row vo table dng lnh INSERT. C php nh sau:
INSERT INTO tablename ([column, column, ...])
VALUES (value, value ...);
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

13.2 Chnh sa d liu


chnh sa d liu dng lnh UPDATE. C php nh sau :
UPDATE table [alias]
SET column [,column...] = [expr, subquery]
[WHERE condition]
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');
Ch thch:
- Cp nht cc nhn vin Dallas hoc Detroit
- Thay DEPTNO ca cc nhn vin ny bng DEPTNO ca Boston
- Thay lng ca 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

13.3 Xa dng
xa dng dng lnh DELETE. C php nh sau:
o to c bn: SQL v PL/SQL

Trang 55

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


DELETE FROM table [WHERE condition]
V d
DELETE FROM emp
WHERE deptno = 10;

13.4 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.

13.5 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 cc lnh iu khin giao dch:


COMMIT

Kt thc giao dch hin ti, thc hin cc chuyn i d liu

SAVEPOINT name

Xc nh im savepoint ca giao dch

ROLLBACK [TO SAVEPOINT name]

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

SET AUTO[COMMIT] ON/OFF

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

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 = MARKETING
WHERE DNAME =SALES;
COMMIT;

o to c bn: SQL v PL/SQL

Trang 56

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

13.6 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.

14 Sequence v index

14.1 Sequence
14.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 nh sau
CREATE SEQUENCE sequence_name
INCREMENT BY integer
START WITH integer
[MAXVALUE integer]
[MINVALUE integer]
[CYCLE/NO CYCLE];
Trong :
INCREMENT BY : ch nh khong cch
START WITH
: Ch nh s u tin
MAXVALUE
: Gi tr ln nht ca
MINVALUE
: Gi tr nh nht ca
CYCLE/NO CYCLE: Dy tun t c quay
CYCLE

ca dy s tun t
ca dy s tun t
dy tun t
dy tun t
vng khi n im cui. Mc nh l NO

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

Cho gi tri hin thi ca sequence

NEXTVAL

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

o to c bn: SQL v PL/SQL

Trang 57

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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
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

14.1.2 Xo v sa sequence
Sa bng lnh:
ALTER SEQUENCE sequence_name
INCREMENT BY integer
START WITH integer
[MAXVALUE integer]
[MINVALUE integer]
[CYCLE/NO CYCLE];
Xo bng lnh:
DROP SEQUENCE sequence_name ;

14.2 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...]);
o to c bn: SQL v PL/SQL

Trang 58

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

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).

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 ;

14.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
---------7698
7654
7499
7844
7900
7521

ENAME
------BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD

JOB
MGR
------------MANAGER 7839
SALESMAN 7698
SALESMAN 7698
SALESMAN 7698
CLERK
7698
SALESMAN 7698

HIREDATE
SAL
COMM
DEPTNO
---------- ----- ------ ---------01-05-1981 2850
30
28-09-1981 1250
1400
30
20-02-1981 1600
300
30
08-09-1981 1500
0
30
03-12-1981
950
30
22-02-1981 1250
500
30

15 To view

15.1 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
o to c bn: SQL v PL/SQL

: 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.
Trang 59

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

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;
Xa cc view
Ch nhng ngi to view mi c quyn DROP
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).

o to c bn: SQL v PL/SQL

Trang 60

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

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).

15.2 Bi tp
1. To view c hin th nh sau:
select * from aggredates;
DEPTNO
AVERAGE MAXIMUN
MINIMUN
SUM
NO_SALS
NO_COMMS
------ ---------- ------- ---------- ---------- ---------- ---------10 2916.66667
5000
1300
8750
3
0
20
2235
3300
800
11175
5
0
30 1566.66667
2850
950
9400
6
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
2. nh ngha bng MESSAGES c cu trc
Column name
Data Type
--------------------------------------------------NUMCOL1
NUMBER(9,2)
NUMCOL2
NUMBER(9,2)
CHARCOL1
VARCHAR2(60)
CHARCOL2
VARCHAR2(60)
DATECOL1
DATE
DATECOL2
DATE

16 Quyn v bo mt

16.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

o to c bn: SQL v PL/SQL

Trang 61

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

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
GRANT privilege[,privilege...] TO user [,user...]
Xo quyn
REVOKE privilege[,privilege...] FROM user [,user...]

16.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:
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.

o to c bn: SQL v PL/SQL

Trang 62

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

16.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;
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.

17 tng quan v pl/sql v procedure builder

17.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

17.2 PL/SQL block


Khi lnh PL/SQL gm cc thnh phn
DECLARE /Khng bt buc/
nh ngha cc bin
BEGIN
on lnh;
EXCEPTION /Khng bt buc/
Hnh ng nu li xut hin;
END;
V d 1
DECLARE
empno NUMBER(4):=7788;
o to c bn: SQL v PL/SQL

Trang 63

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


BEGIN
UPDATE emp SET sal = 9000
WHERE empno = 0001;
....
END;
V d 2
DECLARE
v_deptno NUMBER(2);
v_loc VARCHAR2(15);
BEGIN
SELECT deptno, loc
INTO v_deptno, v_loc
FROM dept
WHERE dname = 'SALES';
END;

17.3 Gii thiu Procedure builder


Trong Procedure Builder c th xy dng cc on chng trnh PL/SQL nh program units, libraries, v
database triggers c client-side v server-side. Procedure Builder c mt s thnh phn sau:

Object Navigator l phn hin th mi i tng trong Procedure Builder's

Program Unit editor

PL/SQL Interpreter

Wizard

Object Navigator. c tnh

ng (+), m (-) cc node xem thng tin

C th connect vo CSDL xem thng tin v cc i tng trong CSDL

Ko th copy i tng

Tm kim i tng

Program Unit editor

Tc dng: Dng son tho on chng trnh PL/SQL d dng

Cch gi:
Nhn p vo icon bn tri ca program unit. Hoc
Nhn p vo nt (+) to Program unit mi

Tin ch
Compile: Dch

o to c bn: SQL v PL/SQL

Trang 64

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


New: To mi
Name: Tm theo cc program unit
Delete: Xo
Close: ng
Help: Tr gip
Apply
Revert
PL/SQL Interpreter

Khi chn mt program unit no . Ni dung ca program unit s hin ln ca s Interpreter debug.

Ca s interpreter cn c phn nh lnh PL/SQL sau du nhc PL/SQL>

Wizard

Ca s Wizard hin th khi to mt program unit mi bng cng c Wizard.

Cng c ny gip d dng hn trong vic xy dng cc program unit.

To mt program unit

To mi bng cch nhn vo nt (+) trn thanh toolbar.

Son tho
Tr gip son tho bng menu edit.
C th dng import v export trn menu file a thm/loi b on text
Chn Syntax palete trong menu program tr gip v c php
Compile tm li, thng bo li hin ln ti dng cui ca ca s

Database Trigger

To mi: Nhn vo nt (+), chn loi database Trigger

Son tho:
Ging nh vi Program unit
Thm cc la chn thuc tnh ca trigger.

Tm vt sa li cc Program Unit

Tm vt, sa li cc Program Unit trong PL/SQL interpreter gm c:


Toolbar
Command line

To cc breakpoint (nhn p vo s dng lnh) dng on chng trnh, kim tra cc bin runtime,
d liu...

Cc cng c trong interpreter


Step into: Thc hin tip n dng lnh tip theo (c th ngoi program unit)
Step over: Thc hin tip n dng lnh tip theo nhng ch trong Program unit .
Step out: Thc hin phn cn li ca chng trnh
Go: Thc hin n cui chng trnh v dng li khi c breakpoint

o to c bn: SQL v PL/SQL

Trang 65

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


Reset: B cc breakpoint.
T chc cc PL/SQL Program Unit

Cc PL/SQL Program Unit thng c t chc li trong cc library (.PLL/.PPL).


Create: To mt library mi
Open: M library
Save: Ghi li thay i

Attached library: S dng cc program unit trong cc Attached library nh cc hm mc nh.

Stored Program Unit: Ct Program Unit thnh cc Stored Program Unit trong CSDL

18 c php lp trnh

18.1 IF
IF condition THEN actions [ELSIF condition THEN actions] [ELSE actions]
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;

18.2 LOOP v EXIT


LOOP
actions;
[EXIT loop_label [WHEN condition]]
END LOOP
V d 1:
LOOP
counter:=counter-1
INSERT INTO numbered_rows VALUES (counter);
.....
IF counter = 10 THEN
o to c bn: SQL v PL/SQL

Trang 66

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


COMMIT;
EXIT;
END IF;
END LOOP;
V d 2:
LOOP
.....
EXIT WHEN total_sals = 60000;
....
END LOOP;

18.3 FOR
FOR control_variable IN [REVERSE] low_value .. high_value
V d
FOR I IN 1..2000
LOOP
INSERT INTO numbered_rows VALUES (i);
preserve_i:=i;
....
END LOOP;

18.4 WHILE
WHILE condition
V d
WHILE Bill<250
LOOP
actions;
END LOOP;

18.5 GOTO
GOTO label
V d
BEGIN
<<label1>>
.....
GOTO label1

o to c bn: SQL v PL/SQL

Trang 67

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


19 cursor

19.1 nh ngha
Cursor: l kiu bin c cu trc, cho php ta x l d liu gm nhiu dng. S dng ph thuc vo cu lnh
query sau n. Trong qu trnh x l cursor nh l mt con tr v tr ca row ang x l
Cc bc s dng bin cursor: Khai bo -> m -> ly d liu x l -> ng
Khai bo
cursor <ten( danh sch bin)> is <cu lnh select>: M vng d liu ct
tr thng tin x l.
vd: cursor x is select deptno from dept where deptno=10;
vd: cursor x(b number) is select * from dept where deptno>b;
M cursor
open <ten (tr ca bin)>
vd: open x;
vd: open x(10);
Ly d liu
Fetch <tn cursor> into <tn bin>
Vd: fetch x into b;
ng cursor
Close <tn cursor>
vd: Close x;
Cc thuc tnh
%isopen

: tr li gi tr True nu cursor ang m

%notfound

: tr li gi tr True nu lnh fetch hin thi tr li khng c row

%found

: tr li gi tri true cho n khi fetch khng cn row no

%rowcount

: tr li s row c thc hin bng lnh fetch

V d1:
declare
cursor v_a is select * from emp;
m v_a%rowtype;
begin
open v_a;
loop
fetch v_a into m;
insert into t_thu(empno, ename,job) values (m.empno,m.ename, m.job);
exit when v_a%notfound;
end loop;
close v_a;
end;
v d 2:
DECLARE
CURSOR c1 IS SELECT dname, loc FROM dept FOR UPDATE OF loc;
dept_rec

c1%ROWTYPE;

sales_count

NUMBER:=0;

non_sales

NUMBER:=0;

o to c bn: SQL v PL/SQL

Trang 68

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


BEGIN
OPEN c1;
LOOP
FETCH c1 INTO dept_rec;
EXIT WHEN c1%NOTFOUND;
IF dept_rec.dname = 'SALES' AND dept_rec.loc!='DALLAS'
THEN
UPDATE dept SET loc='DALLAS' WHERE CURRENT OF c1;
sales_count:=sales_count+1;
ELSIF
dept rec.dname!='SALES' AND dept_rec.loc!='NEWYORK'
THEN
UPDATE dept SET loc ='NEWYORK' WHERE CURRENT OF c1;
non_sales:=non_sales+1;
END IF;
END LOOP;
CLOSE c1;
INSERT INTO counts (sales_set, non_sales_set)
VALUES (sales_count, non_sales);
COMMIT;
END;

19.2 Kiu d liu Table v Record


Kiu d liu Table
C php:
TYPE type_name IS TABLE OF datatype
[NOT NULL] INDEX BY BINARY_INTEGER;
var
type_name;
V d
TYPE NAME IS TABLE OF EMP.ENAME%TYPE;
First_name
NAME;
Last_name
NAME;
Kiu d liu Record
C php
TYPE type_name IS RECORD OF
(Col1 datatype
[NOT NULL{:=|DEFAULT} expr],
(Col2 datatype
[NOT NULL{:=|DEFAULT} expr]...);
var

type_name;

V d
o to c bn: SQL v PL/SQL

Trang 69

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


TYPE emp_rec IS RECORD OF
empno
number(4) not null,
ename
char(10),
job
char(9),
mgr
number(4),
hiredate
date default sysdate,
sal
number(7,2),
comm
number(7,2),
deptno
number(2) not null );
Emp_record emp_rec;

19.3 Sao kiu d liu


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.
nh ngha kiu d liu bn ghi.
Var varref%ROWTYPE
Trong
Var
: bin bn ghi
Varref : Tn bng
V d:
X emp%ROWTYPE;
truy nhp n cc trng trong d liu bn ghi dng ging nh trong 1 row. V d
x.empno, x.sal...
sao kiu d liu ca mt bin no .
X salgade%TYPE
X s c kiu d liu ging bin salgrade.

19.4 Cu lnh SELECT... INTO... trong PL/SQL


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];
trong :
INTO var1, var2... [cursor_var] a gi tr trong table vo trong cc
bin ( c th l bin cursor ).
V d:
SELECT deptno, loc
INTO v_deptno, v_loc
FROM dept
WHERE dname = SALES;

19.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.

o to c bn: SQL v PL/SQL

Trang 70

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


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
- 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.

20 procedure v funtion

20.1 Procedure
L mt nhm cc lnh thc hin chc nng no nhm tng kh nng x l, kh nng s dng cc th tc
chung, tng tnh bo mt v an ton d liu, tin ch trong pht trin.
C php:

Procedure

: L tn ca procedure c to.

Argument

: Gm tn ca danh sch cc bin v kiu ca n.

IN

: Ch nh rng bn phi a tr khi gi procedure.

OUT

: Ch ra rng Procedure s tr li tr cho bin ti mi trng gi n.

IN OUT

: Ch ra rng bn phi gn tr cho argument khi gi procedure v procedure s tr li tr

argument ti mi trng gi.


Nu khng ghi IN, OUT hoc IN OUT th ngm nh s l IN

o to c bn: SQL v PL/SQL

Trang 71

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


Datatype

: L kiu ca argument, y ch c khai bo kiu m kgng c khai bo cc chiu di

argument. V d khng c khai bo argument l VARCHAR2(10) m phi khai bo l VARCHAR2.


Pl/sql_subprogram_body: L phn thn ca procedure c vit bng PL/SQL.
V d:
CREATE OR REPLACE PROCEDURE INS_DEPT(X NUMBER, Y VARCHAR2) IS
BEGIN
INSERT INTO DEPT(DEPTNO,DNAME) VALUES (X,Y);
END;
Mun thc hin procedure ti SQL plus th hin dng lnh execute <ten(danh sch gi tr). Cn trong cc
th tc khc dng lnh gi bnh thng
SQL> execute ins_dept(55, New Name);

20.2 Function
C php:

Cc tham ging nh procedure nhng khc l sau khi gi hm tr li tr


V d:
create or replace function get_dname( y number) return varchar2 is
m char(14);
begin
select dname into m from dept where deptno=y;
if SQL%notfound then
m:='Khong thay';
end if;
return(rtrim(m));
end;
gi hm get_dname ta gi trc tip hoc thng qua cc php gn.
V d:
SQL>

select * from dept where dname=get_dname(10);

DEPTNO
--------10

DNAME
-------------ACCOUNTING

LOC
------------NEW YORK

SQL> select get_dname(20) from dual;


GET_DNAME(20)
-------------------------------------------------------o to c bn: SQL v PL/SQL

Trang 72

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


RESEARCH

20.3 Bi tp
1. Vit hm ly tn gim c theo bin empno c nhp vo,
2. Vit th tc nhp thng tin vo bng message cc trng
numcol1: M phng
charcol1: tn phng ban
numcol2: tng lng ca phng
3. Vit th tc dng cursor; ly s liu v n ngi (n l mt bin c a vo t man hnh) c mc lng
cao nht trong bng emp a vo bng top_sal vi cc gi tr tng ng trong num=empno, name = ename,
salary = sal). Bng top_sal c cu trc nh sau:
NUM
NUMBER(4)
NAME
VARCHAR2(25)
SALARY NUMBER(11,2)

21 pakage

21.1 Package
L tp hp ca cc i tng gm cc procedure, function, variable, constant, cursor v cc exception.
Vic to cc package cho php tng kh nng mm do, tng tnh bo mt, to s thun li trong vic qun
l h thng ng thi tng hiu sut x l ca h thng.
to package thc hin nh sau:

to package body thc hin nh sau:

Vi cc releases trc y ca PL/SQL vic gi cc functions ch c th c thc hin bng cc lnh ca


procedure, nhng gi th cc li gi ny c th xut hin trong cu lnh SQL ging nh lnh procedure. iu
ny c ngha l ta c th s dng cc functions ging nh cc built-in SQL functions. Bng cc m rng SQL
ta c th tp hp phn tch ngay bn trong Oracle Server m ta khng cn ly d liu vo trong ng dng
iu ny lm tng tnh c lp ca c s d liu.
Tuy nhin c th gi c t SQL th cc function phi m bo chc chn vic kim sot kt qu. Vi
cc standalone functions th Oracle c th thc hin iu ny bng vic kim tra function body. Tuy nhin vi
body

ca

package

cho

nn

cc

packaged

functions

ta

phi

dng

pragma

RESTRICT_REFERENCES m bo lut ny.


o to c bn: SQL v PL/SQL

Trang 73

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


Pragma Restrict_references(<Function/procedure Name>, <var1>, ...)
Trong
WNDS:
RNDS:
WNPS:
RNPS:

:
Write no database state
Read no database state
Write no package state
Read no package state

V d:
create or replace package vidu is
function get_dname( y number) return varchar2;
Pragma Resctrict_references(get_dname, WNDS, WNPS);
Procedure ins_dept (x number, y varchar2);
end vidu;
create or replace package body vidu is
function get_dname( y number) return varchar2 is
m char(14);
begin
select dname into m from dept where deptno=y;
if SQL%notfound then
m:='Khong thay';
end if;
return(rtrim(m));
end;
procedure ins_dept(x number, y varchar2) is
begin
insert into dept(deptno,dname) values (x,y);
end;
end vidu;
gi ta thc hin nh sau:
SQL> execute vidu.ins_dept(70,'Vi du');

22 database trigger

22.1 Database Trigger


Mt Database Trigger c to v lu tr trong PL/SQL block tng ng vi table. N c t ng gi n
khi c s truy nhp n table tng ng vi cc hnh ng nh ngha.
to mt triger ta g theo c php sau:

o to c bn: SQL v PL/SQL

Trang 74

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL

Create or replace

: lnh to hoc to li trigger nu n tn ti.

Before

: Ch ra rng trigger s c thc hin trc khi thc hin lnh.

Affter

: Ch ra rng trigger s c thc hin sau lnh gi ti n.

Delete, Insert, Update of <column> on <table>: trigger s c gi khi c cc hnh ng tng ng trn
tng column ca bng.
Referencing

: Ch tn quan h ti cc tr c (OLD) v mi (NEW) ca row .

For each row


WHEN.

: Trigger thc hin tng ng vi mi row c iu kin ng vi mnh trong

Pl/sql_block

: L khi lnh PL/SQL thc hin cc x l theo mong mun.

V d:
create or replace trigger t_dname before insert or update of
for each row when (new.dname is null)
begin
if (:new.dname is null) then
:new.dname:='No Name';
end if;
end ;

dname on dept

22.2 Bi tp
1. Vit trigger khi nhp s liu vo bng emp th n cng nhp s liu vo bng emp1 vi iu kin cu
trc bng emp1 c empno, ename, job, dname
2. Thm 1 ct vo bng DEP tn l SUMSAL. Vit trigger ct SUMSAL lun cha tng lng ca phng
ban ( d liu ly tng ng t bng emp)
3. Lp 1 bng tn l BACKUP c cu trc ging bng EMP sao cho mi bn ghi trong emp b xo s lu
sang backup
4. ng vi cc theo tc insert, update, delete trn bng emp, lu li cc theo tc vo bng message, vi
d liu tng ng charcol1 = tn thao tc, datecol2 = Ngy gi thc hin.

o to c bn: SQL v PL/SQL

Trang 75

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


23 error handing
Error handing l li xut hin trong khi lnh PL/SQL, tt c cc li ny s chy v phn EXCEPTION trong
khi lnh x l.
Khi lnh PL/SQL gm cc thnh phn
DECLARE /Khng bt buc/
nh ngha cc bin
BEGIN
on lnh;
EXCEPTION /Khng bt buc/
Hnh ng nu li xut hin;
END;
C php thc hin cc EXCEPTION;
EXCEPTION
WHEN exception1 [OR exception1. . .] THEN
X l;
. . .
[WHEN exception3 [OR exception4. . .] THEN
X l;
. . .]
[WHEN OTHERS THEN
X l;
. . .]
Trong :
exception
: tn li n
WHEN OTHERS : dng x l cc trng hp li khc
iu kin kch hot exception
C 2 nhm exception:

Cc exception ca bn thn Oracle nh: NO_DATA_FOUND, FOUND, TOO_MANY_ROW ...

Cc exception do ngi s dng khai bo

Cc exception h thng t ng b kch hot trong cc trng hp nht nh. Cc exception ngi s dng
nh ngha phi t kch hot, v d
RAISE exception_identifier;

Mt s exception hay dng ca bn thn Oracle:


Tn

M li

M t

NO_DATA_FOUND

ORA_01403

Cu lnh SELECT INTO khng tr v row no

TOO_MANY_ROW

ORA_01422

Cu lnh SELECT INTO khng tr v ln hn 1


row

INVALID_CURSOR

ORA_01001

Li x l CURSOR

ZERO_DIVIDE

ORA_01476

Li chia cho 0

o to c bn: SQL v PL/SQL

Trang 76

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


DUP_VAL_ON_INDEX

ORA_00001

Li gi tr b trng lp trong mt UNI QUE INDEX

V d Xo nhng nhn vin trong bng emp nu ti phng nhn vin lm vic ch c mt nhn vin; trong
Procedure buider
PROCEDURE DELEMP
(V_EMP IN EMP.EMPNO%TYPE) IS
V_ID EMP.EMPNO%TYPE;
BEGIN
SELECT EMPNO
INTO V_ID
FROM EMP
WHERE EMPNO = V_EMP;
DELETE FROM EMP
WHERE EMPNO = V_EMP;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
ROLLBACK;
TEXT_IO.PUT_LINE(TO_CHAR(V_EMP)||'KHONG CO');
WHEN TOO_MANY_ROWS THEN
ROLLBACK;
TEXT_IO.PUT_LINE('CO LOI DU LIEU TRONG BANG EMP');
WHEN OTHERS THEN
ROLLBACK;
TEXT_IO.PUT_LINE('CO LOI KHAC TRONG BANG EMP');
END;
Gi chy delemp(7364);
Cc exception do ngi s dng nh ngha
Khai bo exception
identifier EXCEPTION;
V d:
DECLARE
credit_exceeded EXCEPTION;
BEGIN
IF stock_ordered > credit_limit THEN
RAISE credit_exceeded;
END IF
....
EXCEPTION
WHEN credit_exceeded THEN ....
END;
t tn cho cc exception h thng
Mi exception h thng c gn mt s xc nh, c th t tn cho cc exception d s dng hn.
PRAGMA EXCEPTION_INIT (exception_identifier, number)
o to c bn: SQL v PL/SQL

Trang 77

Cng ty c phn u t pht trin cng ngh - FPT

Gio trnh SQL v PL/SQL


V d
DECLARE
fetch_failed EXCEPTION;
PRAGMA EXCEPTION_INIT (fetch_failed, -1002);
BEGIN
....
EXCEPTION
WHEN fetch_failed THEN ....
END;

23.1 Bi tp
1. Dng EXCEPTION bt li cht hn cho cc bi tp t phn 19-22.

o to c bn: SQL v PL/SQL

Trang 78

You might also like