Professional Documents
Culture Documents
Giao Trinh Oracle SQL PLSQL Co Ban PDF
Giao Trinh Oracle SQL PLSQL Co Ban PDF
C bn
Oracle c bn - SQL v PL/SQL
MC LC
MC LC ... ...1
Trang 1
Oracle c bn - SQL v PL/SQL
Trang 2
Oracle c bn - SQL v PL/SQL
Trang 3
Oracle c bn - SQL v PL/SQL
PH LC ... ...103
A - TI LIU THAM KHO ... .103
B - DANH MC CC HNH V... ..103
Trang 4
Oracle c bn - SQL v PL/SQL
Trang 5
Oracle c bn - SQL v PL/SQL
EMP
DEPT
EMPNO ENAME EMP DEPT DEPTNO
DEPTNO DNAME
7369 SMITH 20
Column
INSERT L 3 lnh dng nhp thm nhng row mi, thay i ni dung
UPDATE d liu trn cc row hay xo cc row trong table. Nhng lnh ny
DELETE c gi l cc lnh thao tc d liu DML (Data Manipulation
Language)
Trang 6
Oracle c bn - SQL v PL/SQL
SALGRADE
DUMMY BONUS
Bng SALGRADE
Trang 7
Oracle c bn - SQL v PL/SQL
Bng EMP
Tn ct Kiu iu kin
Din gii
EMPNO NUMBER(4) PRIMARY KEY
M nhn vin
ENAME VARCHAR2(10)
Tn nhn vin
JOB VARCHAR2 (9)
Ngh nghip
MGR NUMBER(4) FOREIGN KEY
(EMP.EMPNO) M ngi qun l
HIREDATE DATE Ngy gia nhp cng ty
SAL NUMBER(7,2) Lng
COMM NUMBER(7,2) Thng
DEPTNO NUMBER(2) NOT FOREIGN KEY M phng ban
NULL, (DEPT.DEPTNO)
Trang 8
Oracle c bn - SQL v PL/SQL
Trang 9
Oracle c bn - SQL v PL/SQL
10
30
10
20
14 rows selected.
10
30
20
3 rows selected.
Trang 10
Oracle c bn - SQL v PL/SQL
2.1.5. Gi tr NULL
Ct c gi tr rng (NULL) l ct cha c gn gi tr, ni cch khc n cha c khi to gi tr. Cc ct
vi bt c kiu d liu no cng c th c tr NULL, tr khi c n l kha hay c rng buc ton vn NOT
NULL. Trong biu thc c bt k gi tr NULL no kt qu cng l NULL.
V d:
SELECT ename, sal*12 + comm ANUAL_SAL
FROM emp;
Nu mun chn cc nhn vin c comm l NULL th phi dng ton t IS NULL
SELECT * FROM emp WHERE comm IS NULL;
Trang 11
Oracle c bn - SQL v PL/SQL
SQL
SQL*Plus
L ngn ng giao tip vi Oracle Server
Nhn dng lnh SQL v gi lnh ln
trong vic truy xut d liu
Server
Cu lnh da trn b k t chun ASCII
Tu thuc vo tng phin bn ca Oracle Khng
Thao tc trn cc d liu c trong cc bng
thao tc vi d liu trong database
c nh ngha trong database
Cu lnh c np vo b nh m trn
mt hoc nhiu dng Cu lnh c ti trc tip khng thng qua b
m
Cu lnh khng c vit tt
Cu lnh c th vit tt
C s dng k t kt thc lnh khi thc hin Khng i hi phi c k t kt thc lnh
S dng cc hm trong vic nh dng d S dng cc lnh nh dng d liu ca
liu chnh SQL*Plus
Trang 12
Oracle c bn - SQL v PL/SQL
Trang 13
Oracle c bn - SQL v PL/SQL
SPOOL OFF
EXIT
Thot khi SQL*Plus
Trang 14
Oracle c bn - SQL v PL/SQL
Cc loi nh dng
2.3.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
Trang 15
Oracle c bn - SQL v PL/SQL
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
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.
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.
Trang 16
Oracle c bn - SQL v PL/SQL
Hnh v 4. Hn ch d liu tr v
Mnh WHERE dng t iu kin cho ton b cu lnh truy vn. Trong mnh WHERE c th c cc
thnh phn:
Tn column
Ton t so snh
Tn column, hng s hoc danh sch cc gi tr
V d:
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000 ;
Trang 17
Oracle c bn - SQL v PL/SQL
Ton t
Din gii
=
Ton t bng hay tng ng
!=, ^=, '+, <\>
Ton t khc hay khng tng ng
>
Ton t ln hn
<
Ton t nh hn
>=
Ton t ln hn hoc bng
<=
Ton t nh hn hoc bng
Cc ton t ca SQL
Ton t
Din gii
[NOT] BETWEEN x AND y
[Khng] ln hn hoc bng x v nh hn hoc bng y Thuc bt k gi
IN (danh sch):
tr no trong 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
Trang 18
Oracle c bn - SQL v PL/SQL
Cc ton t logic
Cp u tin
Ton t
1
Cc ton t so snh
2
3 NOT
4 AND
OR
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);
x [NOT] LIKE y
Tm nhn vin c tn bt u bng chui SMITH
SELECT * FROM emp WHERE
ename LIKE 'SMITH_';
V k hiu "_" dng i din cho mt k t bt k nn nu khng c mnh ESCAPE, cu lnh trn s
tm tt c cc nhn vin tn AAB, ABB, ACB, v.v...
Nu mun k hiu "_" mang ngha nguyn thy, tc l khng cn i din cho k t bt k na, ta t du
"\" trc k hiu. ng thi khai bo thm mnh ESCAPE "\"
Trang 19
Oracle c bn - SQL v PL/SQL
Ta cng c th dng mt k t bt k thay cho "\". Chng hn mnh sau c cng kt qu vi mnh trn
SELECT ename FROM emp WHERE ename LIKE '%A^_B%'; ESCAPE '^';
IS [NOT] NULL
V d:
SELECT * FROM emp WHERE comm IS NULL ;
3.2.SP XP D LIU TR V
3.2.1. Mnh ORDER BY
C php:
SELECT [DISTINCT ] {*, column [alias],...}
FROM table;
[WHERE condition]
[ORDER BY expr/position [DESC/ASC]];
Mnh ORDER BY dng sp xp s liu c hin th v phi t v tr sau cng ca cu lnh truy
vn.
V d:
SELECT ENAME, JOB, SAL*12, DEPTNO
FROM EMP
ORDER BY ENAME;
Trang 20
Oracle c bn - SQL v PL/SQL
FROM EMP
ORDER BY DEPTNO, SAL DESC ;
Order gi tr NULL
Ring i vi gi tr NULL, nu sp xp theo th t ASCENDING s nm cc v tr cui cng.
3.3.BI TP
1. Chn nhn vin trong bng EMP c mc lng t 1000 n 2000 (chn cc trng
ENAME, DEPTNO, SAL).
ENAME DEPTNO SAL
ALLEN 30 1600
WARD 30 1250
MARTIN 30 1250
TURNER 30 1500
ADAMS 20 1100
MILLER 10 1300
10 ACCOUNTING
40 OPERATIONS
20 RESEARCH
30 SALES
4. Hin th tn v ngh nghip nhng nhn vin lm ngh th k (cleck) ti phng 20.
ENAME JOB
SMITH CLERK
ADAMS CLERK
Trang 21
Oracle c bn - SQL v PL/SQL
SMITH
ALLEN
MILLER
6. Hin th tn nhn vin, ngh nghip, lng ca nhng nhn vin c gim c qun
l.
ENAME JOB SAL
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
19200 300
18000 0
15000 500
Trang 22
Oracle c bn - SQL v PL/SQL
Chng 4. CC HM SQL
4.1.TNG QUAN V HM SQL
4.1.1. Cu trc hm SQL
Hm SQL l mt c im lm tng kh nng s dng cu lnh SQL. Hm SQL c th nhn nhiu tham s
vo v tr v ch mt gi tr.
Trang 23
Oracle c bn - SQL v PL/SQL
Hm SQL
Din gii
LOG(m,n)
Cho logarit c s m ca n
SIN(n)
Tr v cosin ca n (n tnh bng radian)
Trang 24
Oracle c bn - SQL v PL/SQL
V d hm ROUND(n[,m])
SELECT ROUND(4.923,1),
ROUND(4.923),
ROUND(4.923,-1),
ROUND(4.923,2)
FROM DUMMY;
4.9 5 0 4.92
V d hm TRUNC(n[,m])
SELECT TRUNC (4.923,1),
TRUNC (4.923),
TRUNC (4.923,-1),
TRUNC (4.923,2)
FROM DUMMY;
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;
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;
V d hm POWER(m,n)
SELECT SAL, POWER(SAL,2), POWER(SAL,3), POWER(50,5)
FROM EMP
WHERE DEPTNO =10;
Trang 25
Oracle c bn - SQL v PL/SQL
V d hm EXP(n)
SELECT EXP(4) FROM DUMMY;
EXP(4)
54.59815
V d hm SQRT(n)
SELECT SAL, SQRT(SAL), SQRT(40), SQRT (COMM)
FROM EMP
WHERE DEPTNO =10;
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
Hm SQL
Din gii
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
Trang 26
Oracle c bn - SQL v PL/SQL
V d hm LOWER(char)
LOWER(DNAME) LOWER('SQL
V d hm UPPER(char)
SELECT ENAME FROM EMP WHERE ENAME = UPPER(Smith);
ENAME
SMITH
V d hm INITCAP(char)
SELECT INITCAP(DNAME), INITCAP(LOC) FROM DEPT;
INITCAP(DNAME) INITCAP(LOC)
Trang 27
Oracle c bn - SQL v PL/SQL
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;
***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;
V d hm SUBSTR(char, m [,n])
SELECT SUBSTR(ORACLE,2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5)
FROM DEPT;
ACCOUNTING 1 0 3
Trang 28
Oracle c bn - SQL v PL/SQL
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;
V d hm RTRIM(char1, n [,char2])
SELECT DNAME, RTRIM(DNAME,A), RTRIM(DNAME,AS),
RTRIM(DNAME,ASOP)
FROM DEPT;
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;
10 2 14
10 2 14
10 2 14
10 2 14
Trang 29
Oracle c bn - SQL v PL/SQL
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;
V d cc hm lng nhau:
SELECT DNAME, LENGHT(DNAME), LENGHT(TRANSLATE,DNAME, AS,A))
FROM DEPT;
ACCOUNTING 14 14
RESEARCH 14 13
SALES 14 12
OPERATIONS 14 13
Hm SQL
Din gii
MONTH_BETWEEN(d1, d2)
Cho bit s thng gia ngy d1 v d2. Cho ngy d
ADD_MONTHS(d,n)
thm n thng.
NEXT_DAY(d, char )
Cho ngy tip theo ngy d c th ch bi char. Cho
LAST_DAY(d)
ngy cui cng trong thng ch bi d.
V d hm MONTH_BETWEEN(d1, d2)
SELECT MONTHS_BETWEEN( SYSDATE, HIREDATE),
MONTHS_BETWEEN('01-01-2000','05-10-2000')
FROM EMP
WHERE MONTHS_BETWEEN( SYSDATE,HIREDATE)>240;
MONTHS_BETWEEN(SYSDATE,HIREDATE) TWEEN('01-01-2000','05-10-2000')
Trang 30
Oracle c bn - SQL v PL/SQL
241.271055 -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;
V d hm NEXT_DAY(d, char )
SELECT HIREDATE, NEXT_DAY(HIREDATE,FRIDAY), NEXT_DAY(HIREDATE,6)
FROM EMP
WHERE DEPTNO = 10;
Hm SQL
Din gii
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 Tr v ngy u tin ca
TRUNC(date1, YEAR) nm cha date1
Trang 31
Oracle c bn - SQL v PL/SQL
V d:
Trang 32
Oracle c bn - SQL v PL/SQL
Nm 0-49 50-99
Nm hin t 0-49 th k hin ti Th k sau
50-99 Th k trc Th k hin ti
Mt s khun dng s
Din gii V d Kt qu
K t
9
Xc nh hin th 1 s 999999 1234
Hm SQL
Din gii
AVG([DISTINCT/ALL] n)
Gi tr trung bnh ca n,khng k tr null S
COUNT([DISTINCT/ALL] expr)
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 Tng ca
SUM([DISTINCT/ALL] n)
ca n khng k tr null Variance ca n khng
VARIANCE([DISTINCT/ALL] n)
k tr null
Trang 34
Oracle c bn - SQL v PL/SQL
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
JOB MAX(SAL)
CLERK 1300
SALESMAN 1600
JOB MAX(SAL)
ANALYST 3000
PRESIDENT 5000
Trang 35
Oracle c bn - SQL v PL/SQL
4.4.2. Hm COALSCE
C php:
COALESCE(expr1, expr2, expr3, ...)
Tr v gi tr ca tham s u tin khc null
4.5.BI TP
4.5.1. Hm trn tng dng d liu
1. Lit k tn nhn vin, m phng ban v lng nhn vin c tng 15% (PCTSAL).
DEPTNO ENAME PCTSAL
10 KING 5000
30 BLAKE 2850
10 CLARK 2450
20 JONES 2975
Trang 36
Oracle c bn - SQL v PL/SQL
30 MARTIN 1250
30 ALLEN 1600
30 TURNER 1500
30 JAMES 950
30 WARD 1250
20 FORD 3000
20 SMITH 800
20 SCOTT 3000
20 ADAMS 1100
10 MILLER 1300
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
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)
BLAKE 30 Manager
MARTIN 30 Salesperson
ALLEN 30 Salesperson
TURNER 30 Salesperson
JAMES 30 Clerk
WARD 30 Salesperson
Trang 37
Oracle c bn - SQL v PL/SQL
6. Tm thng itn v tn nhn vin, ngy gia nhp cng ty ca nhn vin phng s 20,
sao cho hin th nh sau:
ENAME DATE_HIRED
7. Hin th tn nhn vin, ngy gia nhp cng ty, ngy xt nng lng (sau ngy gia
nhp cng ty 1 nm), sp xp theo th t ngy xt nng lng.
ENAME HIREDATE REVIEW
10. a chui di dng nn/nn, kim tra nu khng khun dng tr li l YES, ngc li
l NO. Kim tra vi cc chui 12/34, 01/1a, 99\88
VALUE VALID?
Trang 38
Oracle c bn - SQL v PL/SQL
12/34 YES
11. Hin th tn nhn vin, ngy gia nhp cng ty, ngy lnh lng sao cho ngy lnh
lng phi vo th 6, nhn vin ch c nhn lng sau t nht 15 ngy lm vic ti
cng ty, sp xp theo th t ngy gia nhp cng ty.
Trang 39
Oracle c bn - SQL v PL/SQL
Cc column trng tn phi c ch r column nm bng no thng qua tn hoc qua alias. Tn trng
ny c th t trong cc mnh khc nh SELECT, ORDER BY..
V d:
SELECT DEPT.DEPTNO, ENAME,JOB, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY DEPT.DEPTNO;
Cc column trng tn phi c ch r column nm bng no thng qua tn hoc qua alias. Tn trng
ny c th t trong cc mnh khc nh SELECT, ORDER BY..
V d:
SELECT E.ENAME,E.JOB, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S. LOSAL AND S.HISAL;
Trang 40
Oracle c bn - SQL v PL/SQL
Trong mnh WHERE ca mi lin kt cng khng c dng ton t IN hoc OR ni cc iu kin lin
kt khc.
V d:
SELECT E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO (+)=D.DEPTNO
AND D.DEPTNO IN (30, 40);
BLAKE 30 SALES
MARTIN 30 SALES
ALLEN 30 SALES
TURNER 30 SALES
JAMES 30 SALES
WARD 30 SALES
40 OPERATIONS
Mnh USING (Tng t nh Natural Join, nhng cho php ch r tn ct c s dng trong php kt
ni).
Trang 41
Oracle c bn - SQL v PL/SQL
Kt ni FULL OUTER JOIN (All records from both tablesIdentical to a union of left outer join and right
outer join)
SELECT E.ENAME, D.DNAME
FROM EMP E FULL OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);
5.1.6. Cc ton t tp hp
Tn ton t Din gii
UNION Kt hp kt qu ca nhiu cu hi vi nhau, ch gi li mt i din cho cc mu tin
trng nhau.
V d:
JOB
CLERK
MANAGER
PRESIDENT
SALESMAN
Trang 42
Oracle c bn - SQL v PL/SQL
ENAME JOB
BLAKE MANAGER
CLARK MANAGER
JONES MANAGER
DEPTNO AVG(SAL)
10 2916.66667
20 2175
V d:
Trang 43
Oracle c bn - SQL v PL/SQL
Level (cp)
Level l mt ct gi cha cp trong cu trc hnh cy. V d.
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP
CONNECT BY PRIOR EMPNO = MGR
START WITH MGR is NULL;
Trang 44
Oracle c bn - SQL v PL/SQL
V d:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP
CONNECT BY PRIOR MGR = EMPNO
START WITH empno = 7876;
V d 2:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP
CONNECT BY PRIOR EMPNO = MGR AND ENAME != SCOTT
Trang 45
Oracle c bn - SQL v PL/SQL
5.4.BI TP
1. Hin th ton b tn nhn vin v tn phng ban lm vic sp xp theo tn phng
ban.
Trang 46
Oracle c bn - SQL v PL/SQL
6. Hin th tn nhn vin , ngh nghip, lng, mc lng, tn phng lm vic tr nhn
vin c ngh l cleck v sp xp theo chiu gim.
ENAME JOB SAL GRADE DNAME
7. Hin th chi tit v nhng nhn vin kim c 36000 $ 1 nm hoc ngh l cleck.
(gm cc trng tn, ngh, thu nhp, m phng, tn phng, mc lng)
ENAME JOB ANUAL_SAL DNAME GRADE
40 OPERATIONS BOSTON
Trang 47
Oracle c bn - SQL v PL/SQL
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
11. Hin th ngh nghip c tuyn dng vo nm 1981 v khng c tuyn dng vo
nm 1994.
13. Tm tt c cc nhn vin, ngy gia nhp cng ty, tn nhn vin, tn ngi gim c
v ngy gia nhp cng ty ca ngi gim c y.
EMP_NAME EMP_SAL MGR_NAME MGR_SAL
14. 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
15. Tm mc lng cao nht trong mi phng ban, sp xp theo th t phng ban.
ENAME JOB DEPTNO SAL
Trang 48
Oracle c bn - SQL v PL/SQL
CLARK 09-06-1981 10
SMITH 17-12-1980 20
ALLEN 20-02-1981 30
18. Hin th tn nhn vin, m nhn vin, m gim c, tn gim c, phng ban lm
vic ca gim c, mc lng ca gim c.
EMP_NUMBER EMP_NAME EMP_SAL MGR_NUMBER MGR_NAME MGR_DEPT MGR_GRADE
Trang 49
Oracle c bn - SQL v PL/SQL
V du 2:
Select ename, deptno, job
From emp
Where deptno = &&depno_please;
6.2.LNH DEFINE
Khai bo v gn tr cho cc bin, v d khai bo bin condition c gi tr 'sal > 1000'
DEFINE condition = 'sal > 1000'
Trang 50
Oracle c bn - SQL v PL/SQL
6.3.LNH ACCEPT
Khai bo v gn tr cho bin vi dng hin th
ACCEPT variable [NUMBER/CHAR] [PROMPT/NOPROMPT 'text'] HIDE
V d:
ACCEPT Salary NUMBER PROMPT 'Salary figure: '
Salary figure : 3000
T kho hide cho php che chui nhp liu, hay dng khi nhp password.
ACCEPT password CHAR PROMPT 'Enter password: ' HIDE
Password : ***
6.4.BI TP
1. Hin th tn nhn vin, ngy gia nhp cng ty vi iu kin ngy gia nhp cng ty
nm trong khong hai bin runtime c nhp vo t bn phm (&first_date,
&last_date).
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
Trang 51
Oracle c bn - SQL v PL/SQL
V d 1:
CREATE TABLE EMP
EMPNO NUMBER NOT NULL CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10) CONSTRAINT NN_ENAME NOT NULL
CONSTRAINT UPPER_ENAME CHECK (ENAME=UPPER(ENAME)),
JOB VARCHAR2(9),
MGR NUMBER CONSTRAINT FK_MGR REFERENCES
SCOTT.EMP(EMPNO),
HIREDATE DATE DEFAULT SYSDATE, SAL
NUMBER(10,2) CONSTRAINT CK_SAL
CHECK(SAL>500),
COMM NUMBER(9,0) DEFAULT NULL,
DEPTNO NUMBER(2) CONSTRAINT NN_DEPTNO NOT NULL
CONSTRAINT FK_DEPTNO REFERENCES SCOTT.DEPT(DEPTNO))
PCTFREE 5 PCTUSED 75
V du 2:
CREATE TABLE SALGRADE1
Trang 52
Oracle c bn - SQL v PL/SQL
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 ;
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)
Trang 53
Oracle c bn - SQL v PL/SQL
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
Trong :
object Tn object
Trang 54
Oracle c bn - SQL v PL/SQL
Trang 55
Oracle c bn - SQL v PL/SQL
V d sau cho thy cch thc Oracle lu tr d liu kiu s ty theo cch nh precision v
scale khc nhau.
Trang 56
Oracle c bn - SQL v PL/SQL
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
Ngy Julian: L gi tr s cho bit s ngy k t ngy 1 thng ging nm 4712 trc cng nguyn.
V d:
SELECT TO_CHAR (TO_DATE('01-01-1992', 'MM-DD-YYYY'), 'J') JULIAN
FROM DUAL;
Kt qu:
JULIAN
2448623
Trang 57
Oracle c bn - SQL v PL/SQL
Vi
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
V d 1:
SELECT ename FROM emp WHERE hiredate = '12-MAR-1993'
Oracle t ng chuyn chui '12-MAR-1993' sang kiu DATE trong php so snh
V d 2:
SELECT ename FROM emp WHERE ROWID = '00002514.0001.0001'
Trang 58
Oracle c bn - SQL v PL/SQL
7.4.2. UNIQUE
Ch ra rng buc duy nht, cc gi tr ca column ch trong mnh UNIQUE trong cc row
ca table phi c gi tr khc bit. Gi tr null l cho php nu UNIQUE da trn mt ct.
V d:
CREATE TABLE DEPT (
DEPTNO NUMBER(2),
DNAME CHAR(14),
LOC CHAR(13),
CONSTRAINT UNQ_DEPT_LOC UNIQUE(DNAME, LOC));
Trang 59
Oracle c bn - SQL v PL/SQL
7.4.5. CHECK
Rng buc kim tra gi tr.
V d:
CREATE TABLE EMP
(EMPNO NUMBER NOT NULL CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10) CONSTRAINT NN_ENAME NOT NULL
CONSTRAINT UPPER_ENAME CHECK (ENAME =
UPPER(ENAME)),
JOB VARCHAR2(9),
MGR NUMBER CONSTRAINT FK_MGR REFERENCES
SCOTT.EMP(EMPNO),
HIREDATE DATE DEFAULT SYSDATE, SAL
NUMBER(10,2) CONSTRAINT CK_SAL
CHECK(SAL>500),
COMM NUMBER(9,0) DEFAULT NULL,
DEPTNO NUMBER(2) CONSTRAINT NN_DEPTNO NOT NULL
CONSTRAINT FK_DEPTNO REFERENCES SCOTT.DEPT(DEPTNO);
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 :
Trang 60
Oracle c bn - 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;
V d:
DROP TALE emp
Trang 61
Oracle c bn - SQL v PL/SQL
V d:
RENAME emp TO employee
Trong :
REUSE STORAGE gi li khung cha, ch xa d liu
Mun hin th ton b thng tin v cc table, view, snapshot trong t in d liu dng lnh
SELECT * FROM DICTIONARY;
Trang 62
Oracle c bn - SQL v PL/SQL
Hin th cu ca USER_OBJECT
DESCRIBE USER_OBJECT;
7.7.BI TP
1. To bng PROJECT vi cc column c ch ra di y, PROJID l promary key, v
P_END_DATE > P_START_DATE.
Column name Data Type Size.
PROJID NUMBER 4
P_DESC VARCHAR2 20
P_START_DATE DATE
P_END_DATE DATE
BUDGET_AMOUNT NUMBER 7,2
MAX_NO_STAFF NUMBER 2
3. Thm column COMMENTS kiu LONG vo bng PROJECTS. Thm column HOURS kiu
NUMBER vo bng ASSIGNMENTS.
5. Thm rng buc duy nht (UNIQUE) cho 2 column PROJECT_ID v EMPNO ca bng
ASSIGNMENTS.
Trang 63
Oracle c bn - SQL v PL/SQL
Oracle 9i cn cho php thc hin lnh INSERT trn ng thi nhiu table khc nhau, ch s dng mt cu
lnh DML.
V d:
Lnh INSERT khng iu kin (UNCONDITIONAL)
INSERT ALL
INTO T1 (C1, C2, ...) VALUES (C1, C2, ...)
INTO T2 (C1, C2, ...) VALUES (C1, C2, ...)
Trang 64
Oracle c bn - SQL v PL/SQL
Ch thch:
- Cp nht cc nhn vin Dallas hoc Detroit
- Thay DEPTNO ca cc nhn vin ny bng DEPTNO ca Boston - Thay lng
mi nhn vin bng lng trung bnh ca b phn * 1.1 - Thay commission ca
mi nhn vin bng commission trung bnh ca b
phn * 1.5
Trang 65
Oracle c bn - SQL v PL/SQL
USING T2 ON (T1.C9=T2.C9)
WHEN MATCHED THEN UPDATE SET T1.C1=T2.C2, T1.C2=T2.C2 ...
WHEN NOT MATCHED THEN INSERT (C1,C2, ...) VALUES (C1,C2,
...);
C php:
Kt thc giao dch hin ti, thc hin cc chuyn i d liu
COMMIT
Trang 66
Oracle c bn - SQL v PL/SQL
V d:
INSERT INTO DEPT
VALUES (50,TESTING,LAS VEGAS);
SAVEPOINT INSERT_DONE;
UPDATE DEPT
SET DNAME = MARKETING;
ROLLBACK TO INSERT_DONE ;
COMMIT;
8.3.BI TP
1. Thm d liu vo bng PROJECTS.
PROJID 1 2
P_DESC WRITE C030 COURSE PROOF READ NOTES
P_START_DATE 02-JAN-88 01-JAN-89
P_END_DATE 07-JAN-88 10-JAN-89
BUDGET_AMOUNT 500 600
MAX_NO_STAFF 1 1
Trang 67
Oracle c bn - SQL v PL/SQL
Vi:
INCREMENT BY Ch nh khong cch ca dy s tun t
START WITH Ch nh s u tin ca dy s tun t
MAXVALUE Gi tr ln nht ca dy tun t
MINVALUE Gi tr nh nht ca dy tun t
CYCLE/NO CYCLE Dy tun t c quay vng khi n im cui.
Mc nh l NO CYCLE
V d:
CREATE SEQUENCE sample_sequence
INCREMENT 1
STRAT WITH 2
MAXVALUE 100;
sequence.CURRVAL
sequence.NEXTVAL
Trang 68
Oracle c bn - SQL v PL/SQL
S dng sequence
CURRVAL v NEXTVAL c th c s dng trong cc trng hp sau:
Trong danh sch la chn ca cu lnh SELECT
Trong mnh VALUES ca cu lnh INSERT
Trong mnh SET ca cu lnh UPDATE
Khng c s dng CURRVAL v NEXTVAL trong cc trng hp sau Trong
cu hi con
Trong cc view v snapshot
Trong cu lnh SELECT c tc t DISTINCT
Trong cu lnh SELECT c s dng GROUP BY hay ORDER BY
Trong cu lnh SELECT c s dng cc php ton tp hp nh UNION,
INTERSET, MINUS
Trong mnh WHERE ca cu lnh SELECT
Ga tr DEFAULT ca ct trong cu lnh CREATE TABLE hay ALTER TABLE
Trong iu kin ca rng buc CHECK
Hu sequence:
DROP SEQUENCE sequence_name ;
9.2.INDEX
9.2.1. To index
Index l mt cu trc c s d liu, c sever s dng tm mt row trong bng mt
cch nhanh chng. Index bao gm mt key value (mt ct (column) trong hng (row)) v
ROWID.
C php:
CREATE [UNIQUE]] INDEX index_name
ON TABLE ( column [,column...]);
Trang 69
Oracle c bn - SQL v PL/SQL
S lng index cho mt table l khng gii hn. Tuy nhin nu c qu nhiu index s gy nh hng n s
liu khi m d liu trong table b thay i th t theo index. V d: Thm mt row vo bng tt c cc Index
s c update. Nn chn la gia yu cu query, v insert, update c mt index hp l. i vi cc kho
PRIMARY KEY v UNIQUE KEY t kho UNIQUE c t ng thm khi to INDEX.
V d:
CREATE INDEX i-ENAME ON EMP (ENAME);
9.3.BI TP
1. To Index trn ct PROJID cho bng ASSIGNMENT.
Trang 70
Oracle c bn - SQL v PL/SQL
Trong :
OR REPLACE to view chn ln view cng tn
FORCE to view c khi table hay view no
khng tn ti trong cu lnh SELECT.
column, column Tn cc column ca view
WITH CHECK OPTION 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.
CONSTRAINT Ch ra tn ca iu kin kim tra.
V d 1:
CREATE VIEW emp_view
AS
SELECT empno, ename, sal FROM emp WHERE deptno = 10;
V d 2:
CREATE VIEW dept_summary
(name, minsal, maxsal, avsal)
AS
SELECT dname, min(sal), max(sal), avg(sal) FROM emp, dept
FROM emp, dept
WHERE emp.deptno = dept.deptno
GROUP BY dname;
V d 3:
CREATE VIEW dept_view
AS
SELECT eame, sal*12 Annsal
FROM emp
WHERE deptno = 20
WITH CHECK OPTIION CONSTRAINT dept_check;
10.1.2. Xa cc view
Ch nhng ngi to view mi c quyn DROP
Trang 71
Oracle c bn - SQL v PL/SQL
10.2.BI TP
1. To view c hin th nh sau:
select * from aggredates;
NUMCOL1 NUMBER(9,2)
NUMCOL2 NUMBER(9,2)
CHARCOL1 VARCHAR2(60)
CHARCOL2 VARCHAR2(60)
DATECOL1 DATE
DATECOL2 DATE
Trang 72
Oracle c bn - SQL v PL/SQL
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.
Gn quyn
Trang 73
Oracle c bn - SQL v PL/SQL
Xo quyn
REVOKE privilege[,privilege...] FROM user [,user...]
11.2.ROLE
Role l tn ca mt nhm cc quyn hn. N c to qun l quyn hn cho cc ng dng hoc nhm
cc User. Vic dng role cho php qun l thng nht trn cc i tng, tng tnh mm do trong qun tr,
d dng thay i. V d hai i tng X, Y c quyn trn role A tc l role A c quyn g th X, Y c quyn
tng ng khi role A b thay i quyn hn th X, Y cng b thay i quyn hn theo.
Lnh to Role
C php:
CREATE ROLE role [IDENTIFY BY password];
Lnh gn v xo Role ging nh lnh gn v xo Privilege. Chi tit xem trong phn qun tr Oracle.
11.3.SYNONYM
Synonyms l b danh cho mi i tng ca Oracle. Cc i tng ca Oracle l table, view, snapshot,
sequence, procedure, function, package v cc synonym khc. C php
CREATE PUBLIC SYNONYM synonym_name
FROM [OWNER.]object_name;
Trang 74
Oracle c bn - SQL v PL/SQL
Tnh bo mt l v synonym l b danh, nn ngi s dng dng b danh ny s khng on c thm thng
tin g.
Trang 75
Oracle c bn - SQL v PL/SQL
UPDATE emp
SET sal := sal*1.2
WHERE dept_id = 10;
V d1:
DECLARE
empno NUMBER(4):=7788;
BEGIN
UPDATE emp
SET sal = 9000
WHERE empno = 0001;
END;
V d 2:
DECLARE
v_deptno NUMBER(2);
v_loc VARCHAR2(15);
BEGIN
Trang 76
Oracle c bn - SQL v PL/SQL
[ELSE
Cng vic n + 1;
]
END IF;
V d 1:
IF ename = 'SCOTT' THEN
beam_me_up := 'YES';
COMMIT;
ELSE
beam_me_up := 'NO';
ROLLBACK;
END IF;
V d 2:
IF choice= 1 THEN
action := 'Run payroll';
ELSIF choice=2 THEN
action:='Run';
ELSIF choice=3 THEN
action:='Backup';
ELSE
action:='Invalid';
END IF;
Trang 77
Oracle c bn - SQL v PL/SQL
V d:
x := 0;
y := 1000;
LOOP
x := x + 1;
y := y - x;
EXIT x > y;
END LOOP;
V d:
x := 0;
LOOP Index IN 1 .. 100
x := x + 1;
END LOOP;
Trang 78
Oracle c bn - SQL v PL/SQL
V d:
BEGIN
<<Nhn>>
cng vic;
GOTO Nhn;
END;
Trang 79
Oracle c bn - SQL v PL/SQL
V d1:
DECLARE
-- Khai bo cursor truy vn d liu
CURSOR c_Emp IS
SELECT *
FROM emp
WHERE dept_id = 10;
BEGIN
-- M cursor
OPEN c_Emp;
LOOP
-- Ly dng d liu t cursor
FETCH c_Emp INTO v_Emp;
V d 2:
DECLARE
-- Khai bo cursor, c cho php cp nht d liu
CURSOR c_Dept IS
SELECT dname, loc
FROM dept FOR UPDATE OF loc;
BEGIN
-- M cursor
OPEN c_Dept;
LOOP
-- Ly tng dng d liu ca cursor x l
FETCH c_Dept INTO v_Dept;
Trang 80
Oracle c bn - SQL v PL/SQL
UPDATE Dept
SET loc='DALLAS'
WHERE CURRENT OF c_Dept;
-- Lu gi cc thng s va xc nh vo bng
INSERT INTO counts (sales_set, non_sales_set)
VALUES (v_sales_count, v_non_sales);
Tn bin Tn_kiu_Table;
V d:
TYPE t_Name IS
TABLE OF Emp.Ename%TYPE INDEX BY BINARY_INTEGER;
v_First_name t_Name;
v_Last_name t_Name;
Tn bin Tn_kiu_Record;
V d:
TYPE t_Emp IS
RECORD OF (
empno number(4) not null,
Trang 81
Oracle c bn - SQL v PL/SQL
ename 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);
v_Emp_record t_Emp;
Truy nhp n cc trng trong d liu bn ghi dng ging nh trong 1 dng d liu tr v. V d:
v_Emp.empno, v_Emp.sal, ...
Vi:
INTO var1, var2... [cursor_var] Bin lu gi cc gi tr trong
table ly t lnh select.
V d:
SELECT deptno, loc INTO v_deptno, v_loc
FROM dept
WHERE dname = SALES;
Trang 82
Oracle c bn - SQL v PL/SQL
12.5.BI TP
1. Vit on chng trnh tm kim cc hng trong bng EMP vi bin c a t
ngoi vo l &1 dng JOb_type(emp.job%type) v a ra thng bo thch hp
vo bng MESSAGES.
4. a vo vng lp v t 1 n 10 lnh:
UPDATE messages
SET numcol2=100
WHERE numcol1 = v;
nu bt k mt ln update no c s lng row >1 th exit khi vng lp.
Trang 83
Oracle c bn - SQL v PL/SQL
Trang 84
Oracle c bn - SQL v PL/SQL
Trang 85
Oracle c bn - SQL v PL/SQL
13.2.CC HM, TH TC
13.2.1. To hm, th tc trn Client
i vi hm, th tc hay package trn client, ta c th to v bin dch ngay chng. Oracle Builder h tr
trnh thng dch cho php kim tra li ca on chng trnh va thc hin.
Trang 86
Oracle c bn - SQL v PL/SQL
13.2.3. D li i vi cc hm, th tc
Vi Procedure Builder, ta c th thc hin chy cc hm, th tc theo tng bc. Qua , ta c th pht hin
c cc li xy ra trong chng trnh, nu c. Mn hnh PL/SQL Interpreter cho php ta thc hin iu ny:
Trang 87
Oracle c bn - SQL v PL/SQL
14.1.1. To th tc
Ta c th to th tc trc tip bng dng lnh sau: C php:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
...)]
IS | AS
BEGIN
PL/SQL Block;
END;
Vi:
procedure_name Tn th tc
argument Tn tham s
mode Loi tham s: IN hoc OUT hoc IN OUT,
mc nh l IN
datatype Kiu d liu ca tham s
PL/SQL Block Ni dung khi lnh SQL v PL/SQL trong
th tc
V d:
CREATE OR REPLACE PROCEDURE change_sal
(p_Percentage IN number,
p_Error OUT varchar2,
)
IS
v_User_exp Exception;
BEGIN
IF p_Percentage < 0 THEN
RAISE v_User_exp;
END IF;
UPDATE emp
SET sal = sal*p_Percentage/100;
EXCEPTION
Trang 88
Oracle c bn - SQL v PL/SQL
14.1.2. Hu b th tc
Tng t nh vic to th tc, ta c th hu b th tc thng qua cu lnh SQL. C php:
DROP PROCEDURE Tn th tc;
V d:
DROP PROCEDURE change_sal;
14.1.3. Cc bc lu gi mt th tc
Mt th tc trong Oracle c thc hin theo hai bc chnh sau:
1. Ni dung ca th tc c thit lp v lu gi trong database di dng vn bn
(text)
2. Ton b ni dung ca th tc c bin dch ra dng m p-code, tin cho vic thc
hin th tc .
14.2.HM
Tng t nh th tc, hm (function) cng l nhm cc lnh PL/SQL thc hin chc nng no . Khc vi
th tc, cc hm s tr v mt gi tr ngay ti li gi ca n.
Trang 89
Oracle c bn - SQL v PL/SQL
14.2.1. To hm
Ta c th to hm trc tip bng dng lnh sau: C php:
CREATE [OR REPLACE] FUNCTION function_name
[(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
...)]
RETURN datatype
IS | AS
BEGIN
PL/SQL Block;
END;
Vi:
function_name Tn hm
argument Tn tham s
mode Loi tham s: IN hoc OUT hoc IN OUT,
mc nh l IN
datatype Kiu d liu ca tham s
PL/SQL Block Ni dung khi lnh SQL v PL/SQL trong
th tc
V d:
CREATE OR REPLACE FUNCTION get_sal
(p_Emp_id IN number)
RETURN varchar2
IS
BEGIN
SELECT sal
FROM emp
WHERE emp_id = p_Emp_id;
RETURN null;
EXCEPTION
WHEN others THEN
RETURN Li: || SQLERRM;
END;
Trang 90
Oracle c bn - SQL v PL/SQL
V d:
SQL> VARIABLE v_Sal number;
1300
14.2.5. Hu b hm
Tng t nh vic to hm, ta c th hu b hm thng qua cu lnh SQL. C php:
DROP FUNCTION Tn hm;
V d:
DROP FUNCTION get_sal;
Trang 91
Oracle c bn - SQL v PL/SQL
14.2.6. Hm v th tc
Ta to cc th tc lu gi mt lot cc cc cu lnh phc v cho nhiu ln gi khc nhau. Th tc c th
khng c, c mt hoc nhiu tham s. Tuy nhin th tc khng tr li bt k mt kt qu no.
Hm cng ging nh th tc, n cng bao gm mt lot cc cu lnh, c th khng c, c mt hoc nhiu
tham s. Tuy nhin khc vi th tc, hm bao gi cng tr v mt kt qu. V vy, ta s dng hm trong cc
php tnh ton, gn gi tr. Khi , cu lnh thc hin s d dng v sng sa hn.
So snh gia hm v th tc
Th tc Hm
Thc hin ging nh thc hin cc cu C th c gi ging nh mt phn ca
lnh PL/SQL biu thc
Khng c kiu gi tr tr v C cha gi tr tr v
C th tr v mt hoc nhiu gi tr Tr v mt gi tr
(thng qua tham s OUT)
14.3.PACKAGE
Package l mt tp hp cc kiu d liu, bin lu gi gi tr v cc th tc, hm c cng mt mi lin h vi
nhau, c gp chung li. c im ni bt nht ca package l khi mt phn t trong package c gi th
ton b ni dung ca package s c np vo trong h thng. Do , vic gi ti cc phn t khc trong
package sau ny s khng phi mt thi gian np vo h thng na. T , nng cao tc thc hin lnh
ca ton b hm, th tc c trong package.
Trang 92
Oracle c bn - SQL v PL/SQL
14.3.2. To package
Ta c th to package trc tip bng dng lnh sau: C php
khai bo phn m t package:
CREATE [OR REPLACE] PACKAGE package_name IS
| AS
public type and cc item declarations
subprogram specifications
END package_name;
Vi:
package_name Tn package
type and item declarations Phn khai bo cc bin,
hng, cursor, ngoi l v
kiu s dng trong ton b
package
subprogram specifications Khai bo cc hm, th tc
PL/SQL
Trang 93
Oracle c bn - SQL v PL/SQL
IS | AS
private type and item declarations Khai bo cc kiu
ch s dng ring
trong package
subprogram bodies Ni dung ca
package
END package_name;
Vi:
package_name Tn package
Phn khai bo cc bin, hng,
type and item declarations
cursor, ngoi l v kiu
Khai bo cc hm, th tc
subprogram specifications
PL/SQL
V d:
-- Phn khai bo ca package
CREATE OR REPLACE PACKAGE comm_package
IS
v_comm number := 10; -- Khai bo bin c gi tr khi to
Trang 94
Oracle c bn - SQL v PL/SQL
v_valid BOOLEAN;
BEGIN
v_valid := validate_comm(p_comm);
IF v_valid = TRUE THEN
v_comm := p_comm;
ELSE
RAISE_APPLICATION_ERROR(-20210,Invalid comm);
END IF:
END reset_comm;
END comm_package;
14.3.3. Hu package
Tng t nh vic to package, ta c th hu b hm thng qua cu lnh SQL. C php:
-- Hu phn package specification
DROP PACKAGE Tn package;
-- Hu phn package body
DROP PACKAGE BODY Tn package;
V d:
DROP PACKAGE comm_package;
DROP PACKAGE BODY comm_package;
Trang 95
Oracle c bn - SQL v PL/SQL
Trang 96
Oracle c bn - SQL v PL/SQL
15.1.TO TRIGGER
Khi to database trigger, ta cn lu ti mt s tiu ch nh:
Thi gian thc hin: BEFORE, AFTER
Hnh ng thc hin: INSERT, UPDATE, DELETE
i tng tc ng: bng d liu
Loi trigger thc hin: trn dng lnh hay trn cu lnh Mnh
iu kin thc hin
Ni dung ca trigger
Ta cng c th phn loi trigger theo loi cu lnh kch hot nh: INSERT, UPDATE, DELETE. Trong
cc trigger thuc mt trong ba loi lnh: INSERT, UPDATE,DELETE. Trigger UPDATE cn phi ch
r thm tn ct d liu kch hot trigger mi khi gi tr d liu trong b thay i. Bn trong Trigger c th
c cha cc lnh thao tc d liu. Do , cn phi trnh trng hp lp li theo kiu quy.
Mt cch khc ta cng c th phn loi trigger theo s ln kch hot. theo s c 02 loi trigger:
Trigger mc lnh: Trigger c kch hot mi khi thc hin cu lnh.
Trigger mc dng lnh: Trigger c kch nhiu ln ng vi mi dng d liu chu
nh hng bi thao tc thc hin lnh.
Trang 97
Oracle c bn - SQL v PL/SQL
Trang 98
Oracle c bn - SQL v PL/SQL
V d:
CREATE OR REPLACE TRIGER secure_emp
BEFORE INSERT ON emp
BEGIN
IF TO_CHAR(sysdate,DY) IN (SAT,SUN)
OR TO_CHAR(sysdate,HH24) NOT BETWEEN 08 AND 18
THEN
RAISE_APPLICATION_ERROR (-20500,
Thi gian lm vic khng ph hp);
END IF;
END;
Trang 99
Oracle c bn - SQL v PL/SQL
15.2.QUN L TRIGGER
15.2.1. Phn bit database trigger
Trigger v th tc
Trigger Th tc
Lnh to CREATE TRIGGER Lnh to CREATE PROCEDURE
Lu gi trong T in d liu di dng Lu gi trong T in d liu di dng
m ngun v dng p-code m ngun v dng p-code
c gi ngm nh Thc hin theo li gi tng minh
Khng cho php dng: COMMIT, Cho php dng: COMMIT, ROLLBACK,
ROLLBACK, SAVEPOINT SAVEPOINT.
Trang 100
Oracle c bn - SQL v PL/SQL
Database Trigger
Form Trigger
c thc hin khi c tc ng ln
c thc hin ch bi cc tc ng ngay trn
database do ng dng hoc do chnh cc
ng dng
cng c ca Oracle
c kch hot bi cc lnh SQL
c kch bi cc s kin trn ng dng Khng
Phn bit hai loi trigger trn cu lnh v
trn dng d liu phn bit
Tu theo li xy ra, trigger c th gy ra
rollback cu lnh Tu theo li xy ra, c th rollback ton b giao
dch
Database Trigger c kch hot c lp vi cc Form Trigger
Cho php/ khng cho php kch hot tt c cc databse trigger ca mt bng C php:
ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS;
Vi:
table_name Tn bng;
V d:
-- Khng cho php cc trigger ng vi bng emp c hot ng
ALTER TABLE emp DISABLE ALL TRIGGERS;
15.2.3. Hu b trigger
S dng cu lnh SQL hu b trigger.
Trang 101
Oracle c bn - SQL v PL/SQL
C php:
DROP TRIGGER trigger_name;
V d:
DROP TRIGGER check_sal;
Trang 102
Oracle c bn - SQL v PL/SQL
PH LC
A - DANH MC CC HNH V
Hnh v 1. Minh ho cc thnh phn logic trong database ... ...6
Hnh v 2. M hnh d liu thc hnh... ..7
Hnh v 3. Cu lnh ca SQL*Plus ... .12
Hnh v 4. Hn ch d liu tr v ... ...17
Hnh v 5. Cu trc hm SQL ... ...23
Hnh v 6. Phn loi hm SQL ... .24
Hnh v 7. Cu trc ca Object Navigator... ...84
Hnh v 8. Son tho hm, th tc pha Client... ..85
Hnh v 9. Son tho hm, th tc, trigger pha Server ... ...86
Hnh v 10. To hm, th tc ti Client ... .86
Hnh v 11. To hm, th tc ti Server ... ..87
Hnh v 12. Mn hnh PL/SQL Interpreter ... ...87
Hnh v 13. Cc bc thc hin mt th tc ... .89
Hnh v 14. Cu trc package ... ..93
Hnh v 15. Th t thc hin trigger... ..98
Hnh v 16. To trigger bng cng c Procedure Builder ... .100
Hnh v 17. Trigger tc ng trn dng d liu... ..100
Trang 103