oracle plsql | oracle plsql training | oracle sql and pl sql
Oracle PLSQL Chuan
-
Upload
manhcompany -
Category
Documents
-
view
254 -
download
0
Transcript of Oracle PLSQL Chuan
-
8/4/2019 Oracle PLSQL Chuan
1/104
SQL v PL/SQLC bn
-
8/4/2019 Oracle PLSQL Chuan
2/104
Oracle c bn - SQL v PL/SQL
MC LC
MC LC ... ...1
CHNG 1. GII THIU CHUNG ... ...51.1. NGN NG SQL ... ..5
1.1.1. Lch s pht trin ca ngn ng SQL ... .51.1.2. Chun SQL ... ..5
1.2. CC KHI NIM C BN TRONG C S D LIU ... ...51.2.1. Cc thnh phn logic trong database... ..51.2.2. Cc i tng trong database ... ...61.2.3. Cc nhm lnh SQL c bn ... .6
1.3. C S D LIU THC HNH... ..71.3.1. M hnh d liu ... ..71.3.2. Cu trc bng d liu ... .7
CHNG 2. LNH TRUY VN C BN ... .92.1. CU LNH TRUY VN ... ..9
2.1.1. Quy tc vit lnh ... ...92.1.2. Cu lnh truy vn c bn ... ..92.1.3. Cc thnh phn khc ca mnh SELECT ... ..92.1.4. Phn bit gi tr d liu tr v ... ..102.1.5. Gi tr NULL ... ..11
2.2. SQL*PLUS, CNG C TNG TC LNH SQL VI DATABASE ... ...112.2.1. Cu lnh tng tc ca SQL*Plus ... .112.2.2. Phn nhm cu lnh trong SQL*Plus... ...122.2.3. Chi tit cc lnh SQL*Plus c bn ... .13
2.3. BI TP ... ..15
CHNG 3. TRUY VN D LIU C IU KIN ... ..173.1. CC GII HN TRONG TRUY VN D LIU ... ...17
3.1.1. Mnh WHERE... ...173.1.2. Cc ton t s dng trong mnh WHERE ... ..183.1.3. V d s dng cc ton t iu kin ... .19
3.2. SP XP D LIU TR V... ..203.2.1. Mnh ORDER BY ... ...203.2.2. Sp xp nhiu ct d liu tr v... ..20
3.3. BI TP ... ..21
CHNG 4. CC HM SQL ... ...234.1. TNG QUAN V HM SQL... ..23
4.1.1. Cu trc hm SQL ... .234.1.2. Phn loi hm SQL ... ...23
4.2. HM SQL THAO TC TRN TNG DNG D LIU... .244.2.1. Cc hm thao tc trn kiu d liu s... ..244.2.2. Cc hm thao tc trn kiu d liu k t... .264.2.3. Cc hm thao tc trn kiu d liu thi gian... .304.2.4. Cc hm chuyn i kiu ... ...32
4.3. HM THAO TC TRN TP HP ... ...344.3.1. Cc hm tc ng trn nhm ... ...344.3.2. Mnh GROUP BY ... ...35
4.4. MT S HM MI B SUNG TRONG Oracle9i ... ..364.4.1. Hm NULLIF ... .364.4.2. Hm COALSCE ... ..364.4.3. Cu lnh case ... ..36
Trang 1
-
8/4/2019 Oracle PLSQL Chuan
3/104
Oracle c bn - SQL v PL/SQL
4.5. BI TP ... ..364.5.1. Hm trn tng dng d liu ... ..364.5.2. Hm trn nhm d liu ... ...39
CHNG 5. LNH TRUY VN D LIU M RNG... .405.1. KT HP D LIU T NHIU BNG ... ...40
5.1.1. Mi lin kt tng ng ... ..405.1.2. Mi lin kt khng tng ng ... .40
5.1.3. Mi lin kt cng ... .405.1.4. Lin kt ca bng vi chnh n (t thn).. . .415.1.5. Cch biu din kt ni mi trong Oracle 9i ... ...415.1.6. Cc ton t tp hp ... ..42
5.2. LNH TRUY VN LNG ... ...435.2.1. Cu lnh SELECT lng nhau. .. ...435.2.2. Ton t SOME/ANY/ALL/NOT IN/EXITS ... ..43
5.3. CU TRC HNH CY ... .445.3.1. Cu trc hnh cy trong 1 table ... ...445.3.2. K thut thc hin ... ..445.3.3. Mnh WHERE trong cu trc hnh cy... ..45
5.4. BI TP ... ..46
CHNG 6. BIN RUNTIME ... ...506.1. D LIU THAY TH TRONG CU LNH ... .506.2. LNH DEFINE ... ..506.3. LNH ACCEPT ... ...516.4. BI TP ... ..51
CHNG 7. TABLE V CC LNH SQL V TABLE... ...527.1. LNH TO TABLE... 52
7.1.1. C php to bng ... 527.1.2. Tnh ton kch thc table (tham kho) ... 53
7.2. MT S QUYTC KHI TO TABLE ... 547.2.1. Quy tc t tn Object ... 547.2.2. Quy tc khi tham chiu n Object ... 54
7.3. Cc Kiu d liu c bn... 557.3.1. Kiu CHAR ... 557.3.2. Kiu VARCHAR2 ... 557.3.3. Kiu VARCHAR ... 567.3.4. Kiu NUMBER ... 567.3.5. Kiu FLOAT ... 567.3.6. Kiu LONG ... 567.3.7. Kiu DATE ... 577.3.8. Kiu RAW v kiu LONG RAW... 587.3.9. Kiu ROWID ... 587.3.10. Kiu MLSLABEL ... 587.3.11. Chuyn i kiu ... 58
7.4. RNG BUC D LIU TRONG TABLE ... 597.4.1. NULL/NOT NULL ... 59
7.4.2. UNIQUE ... 597.4.3. PRIMARY KEY ... 597.4.4. FOREIGN KEY ( Referential ) ... 607.4.5. CHECK ... 60
7.5. LNH DDL CAN THIP TI TABLE ... 607.5.1. Chnh sa cu trc table ... 607.5.2. Cc lnh DDL khc ... 617.5.3. Ch dn cho table ... 617.5.4. Thay i tn object... 627.5.5. Xa d liu ca table ... 62
Trang 2
-
8/4/2019 Oracle PLSQL Chuan
4/104
Oracle c bn - SQL v PL/SQL
7.6. THNG TIN V TABLE TRONG T IN D LIU... ...627.7. BI TP ... ..63
CHNG 8. CC LNH THAO TC D LIU... ..648.1. THAO TC D LIU TRONG TABLE ... .64
8.1.1. Thm mi dng d liu ... ...648.1.2. Cp nht dng d liu ... .658.1.3. Lnh Merge... ...65
8.1.4. Xa dng d liu... .668.1.5. Li rng buc d liu ... ...668.2. LNH IU KHIN GIAO DCH... ..668.3. BI TP ... ..67
CHNG 9. SEQUENCE V INDEX... ...689.1. SEQUENCE... ...68
9.1.1. To Sequence... ..689.1.2. Thay i v hu sequence ... .69
9.2. INDEX... ...699.2.1. To index ... ...699.2.2. S dng index... ..69
9.3. BI TP ... ..70
CHNG 10. VIEWS ... ...7110.1. VIEWS ... ...71
10.1.1. To view ... ..7110.1.2. Xa cc view ... ..71
10.2. BI TP ... ...72
CHNG 11. QUYN V BO MT ... ..7311.1. QUYN - PRIVILEGE ... .7311.2. ROLE... ..7411.3. SYNONYM... ...74
CHNG 12. GII THIU NGN NG PL/SQL... ..7612.1. TNG QUAN V PL/SQL ... ...76
12.1.1. C php lnh PL/SQL ... ...7612.1.2. Khi lnh PL/SQL ... ...76
12.2. LNH LP TRNH PL/SQL N GIN ... ...7712.2.1. Lnh IF... ..7712.2.2. Lnh lp LOOP khng nh trc ... ...7812.2.3. Lnh lp LOOP c nh trc ... ...7812.2.4. Lnh lp WHILE ... ...7812.2.5. Lnh GOTO, nhy v iu kin ... .78
12.3. GII THIU CURSOR ... ...7912.4. CC KIU D LIU THNG DNG... ..81
12.4.1. Kiu d liu Table ... ...8112.4.2. Kiu d liu Record ... ...8112.4.3. Sao kiu d liu mt dng ... ..8212.4.4. Sao kiu d liu ca mt ct ... ..8212.4.5. Lnh SELECT... INTO... ...82
12.5. BI TP ... ...83
CHNG 13. GII THIU PROCEDURE BUILDER ... ..8413.1. CC THNH PHN TRONG PROCEDURE BUILDER ... ...84
13.1.1. Object Navigator ... ..8413.1.2. Program Unit Editor... .8513.1.3. Store Program Unit Editor ... ...85
Trang 3
-
8/4/2019 Oracle PLSQL Chuan
5/104
Oracle c bn - SQL v PL/SQL
13.1.4. Database Trigger Edditor ... .8513.2. CC HM, TH TC ... .86
13.2.1. To hm, th tc trn Client ... ...8613.2.2. To hm, th tc trn Server ... .8613.2.3. D li i vi cc hm, th tc ... ..87
CHNG 14. GII THIU CC TH TC, HM V PACKAGE ... ...8814.1. TH TC ... ..88
14.1.1. To th tc ... ..8814.1.2. Hu b th tc ... ...8914.1.3. Cc bc lu gi mt th tc ... ...89
14.2. HM ... ...8914.2.1. To hm... ...9014.2.2. Thc hin mt hm ... .9014.2.3. Li ch ca vic s dng hm ... ...9114.2.4. Mt s hn ch khi s dng hm trong cu lnh SQL ... ..9114.2.5. Hu b hm... .9114.2.6. Hm v th tc ... ..92
14.3. PACKAGE... ...9214.3.1. Cu trc ca package ... ...9214.3.2. To package ... ..9314.3.3. Hu package ... ..95
14.3.4. Li ch ca vic s dng package ... ..9514.3.5. Mt s package chun ca Oracle ... ..96
CHNG 15. DATABASE TRIGGER ... .9715.1. TO TRIGGER ... ..97
15.1.1. Phn loi trigger ... ...9715.1.2. Lnh to trigger ... .9815.1.3. S dng Procedure builder to trigger ... ...99
15.2. QUN L TRIGGER ... ...10015.2.1. Phn bit database trigger ... ...10015.2.2. Thay i trng thi ca database trigger ... ...10115.2.3. Hu b trigger ... .10115.2.4. Lu khi s dng trigger ... ..102
PH LC ... ...103A -TI LIU THAM KHO... .103B -DANH MC CC HNH V... ..103
Trang 4
-
8/4/2019 Oracle PLSQL Chuan
6/104
Oracle c bn - SQL v PL/SQL
Chng 1. GII THIU CHUNG
1.1.NGN NG SQL
1.1.1. Lch s pht trin ca ngn ng SQL
M hnh c s d liu (CSDL) quan h - RDBMS, do E.F Codd a ra vo u thp k 70. T n nay,
n lin tc pht trin tr thnh m hnh CSDL ph bin bc nht. M hnh quan h gm cc thnh phn sau:Tp hp cc i tng v / hoc cc mi quan h Tp hp ccx l tc ng ti cc quan hRng 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 gianhng nm 70. H ngn ng SQL u tin (SEQUEL2) c IBM cng b vo thng 11nm 1976. Nm 1979, tp on Oracle gii thiu thng phm u tin ca SQL. SQL cngc 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 CSDLquan h.
1.1.2. Chun SQL
Nm 1989, vin tiu chun quc gia Hoa K (ANSI) cng nhn SQL l ngn ng chun truy cp CSDLquan 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 htrong vn bn ISO 9075-1989.
Tt c cc h qun tr CSDL ln trn th gii cho php truy cp bng SQL v hu ht theo chun ANSI.
1.2.CC KHI NIM C BN TRONG C S D LIU
1.2.1. Cc thnh phn logic trong database
Thnh phn Din gii
Table Cu trc lu tr c bn nht trong CSDL quan h (RDBMS), n baogm 1 hoc nhiu columns (ct d liu) vi 0 hoc nhiu rows (dng d liu).
Row T hp nhng gi tr ca Column trong bng. Mt row cn c gil 1 record (bn ghi).
Column Quy nh mt loi d liu trong bng. V d: loi d liu tn phngban c trong bng phng ban. Ta th hin th column ny thng qua tn columnv c th km theo mt vi thng tin khc v column nh kiu d liu, dica d liu.
Field Giao ca column v row. Field chnh l ni cha d liu. Nu khngc d liu trong field ta ni field c gia tr l NULL.
Primary Key L mt column hoc mt tp cc column xc nh tnh duy nht cacc rows trong bng. V d DEPTNOl Primary Key ca bng DEPTv n c dng xc nh duy nht mt phng ban trong bngDEPT m i din l mt row d liu.
Trang 5
-
8/4/2019 Oracle PLSQL Chuan
7/104
Oracle c bn - SQL v PL/SQL
Primary Key nht thit phi c s liu.
Foreign Key L mt column hoc mt tp cc columns c tham chiu ti chnhbng hoc mt bng khc.
Foreign Key xc nh mi quan h gia cc bng.
Constraints L cc rng buc i vi d liu trong cc bng thuc database. Vd: Foreign Key, Primary Key...
V d: minh ho cc thnh phn logic trong database
EMP
EMPNO ENAME EMP DEPTDEPTNO
7369 SMITH 20
Row 7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 307698 BLAKE 30
DEPT
DEPTNO DNAME
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
Foreignkey7782 CLARK 10 Primary key
Column
Hnh v 1. Minh ho cc thnh phn logic trong database
1.2.2. Cc i tng trong database
i tng Din giiTable Cu trc lu tr c bn nht trong CSDL quan h (RDBMS), gm
row v column
View L cu trc logic hin th d liu t 1 hoc nhiu bng
Sequence Lt sinh gi tr cho cc primary key
Index Tng tnh thc thi cho cu lnh truy vn
Synonym Tn tng ng ca i tng
Program unit Tp hp cc cu lnh thc hin c vit bi ngn ng SQL vPL/SQL, bao gm Procedure, function, package...
1.2.3. Cc nhm lnh SQL c bn
Tn lnh
SELECT
INSERT
UPDATEDELETE
Din gii
L lnh thng dng nht, dng ly,xem d liu trong CSDL.
L 3 lnh dng nhp thm nhng row mi, thay i ni dungd liu trn cc row hay xo cc row trong table. Nhng lnh nyc gi l cc lnh thao tc d liu DML (Data ManipulationLanguage)
Trang 6
-
8/4/2019 Oracle PLSQL Chuan
8/104
Oracle c bn - SQL v PL/SQL
CREATE
ALTERDROPRENAMETRUNCATE
COMMITROLLBACKSAVE POINT
GRANT
REVOKE
L 3 lnh dng thit lp, thay i hay xo b cu trc d liunh l table, view, index. Nhng lnh ny c gi l cc lnh nh ngha dliu DDL (Data Definition Language)
Qun l vic thay i d liu bng cc lnh DML. Vic thay i d liu cth c nhm li thnh cc transaction.
2 lnh ny dng gn hoc hu cc quyn truy nhp vo CSDL Oracle vcc cu trc bn trong n. Nhng lnhny c gi l cc lnh iu khin dliu DCL (Data Control Language)
1.3.C S D LIU THC HNH
1.3.1. M hnh d liu
DEPT EMP
SALGRADE
DUMMY BONUS
Hnh v 2. M hnh d liu thc hnh
1.3.2. Cu trc bng d liu
Bng DEPT
Tn ct Kiu iu kin Din gii
DEPTNO NUMBER(2) PRIMARY KEY M phng ban
DNAME VARCHAR2(14) Tn phng ban
LOC VARCHAR2(13) a ch
Bng SALGRADE
Tn ct Kiu iu kin Din gii
GRADE NUMBER PRIMARY KEY Mc lng
LOSAL NUMBER Gi tr thp nht
HISAL NUMBER Gi tr cao nht
Trang 7
-
8/4/2019 Oracle PLSQL Chuan
9/104
Oracle c bn - SQL v PL/SQL
Bng EMP
Tn ct Kiu iu kin
EMPNO NUMBER(4) PRIMARY KEY
ENAME VARCHAR2(10)
JOB VARCHAR2 (9)
MGR NUMBER(4) FOREIGN KEY
(EMP.EMPNO)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2) NOT FOREIGN KEY
NULL, (DEPT.DEPTNO)
Din gii
M nhn vin
Tn nhn vin
Ngh nghip
M ngi qun l
Ngy gia nhp cng ty
Lng
Thng
M phng ban
Trang 8
-
8/4/2019 Oracle PLSQL Chuan
10/104
Oracle c bn - SQL v PL/SQL
Chng 2. LNH TRUY VN C BN
2.1.CU LNH TRUY VN
2.1.1. Quy tc vit lnh
Cc cu lnh truy vn c biu din theo cc quy tc sau:
Cc lnh trong cu lnh SQL thuc loi khng phnbit ch vit hoa hay thng. Nidung ca mt cu lnh SQL c th c tri di trn nhiu dng. Cc t kho khng c phpvit tt hay phn cch trn nhiu dngCc mnh thng thng c t trn nhiu dngkhc nhau r rng trong victh hin cu lnh, ta nn s dng cc du TAB khi vit lnh Ta cth s dng cc k t c bit nh: +, -, \, *,... biu din gi tr trong cu
lnh.
Lnh kt thc bi du chm phy (;).
2.1.2. Cu lnh truy vn c bn
C php:SELECT [DISTINCT ] {*, column [alias],...}
FROM table;
Vi:
SELECT Hin th ni dung ca mt hay nhiu ctDISTINCT Phn bit ni dung gia cc dng d liu tr v
Ly tt cc cc ct trong bngcolumn Tn ct d liu cn tr valias Phn tiu ca ctd liu tr vFROM table Tn bng cha d liu truy vn
V d:
SELECT
FROM emp;
Cu trc ca lnh truy vn gm c hai phn:
Mnh chn la bao gm Lnh SELECT v tn ct d liu tr v
Mnh biu din ni cha bao gm FROMv tn bng.
2.1.3. Cc thnh phn khc ca mnh SELECT Trong mnh SELECT
cn c th a vo cc thnh phn khc:
Biu thc ton hc
Column aliasCc column c ghp chui
Literal
Biu thc ton hc
Trong mnh SELECTbiu thc ton hc c th cc gi tr (column hoc hng s), cc ton t, cc hm.Cc ton t c dng l (+), (-), (*), (/). u tin ca cc ton t ging trong phn s hc.
V d:
Trang 9
-
8/4/2019 Oracle PLSQL Chuan
11/104
Oracle c bn - SQL v PL/SQL
SELECT ename, sal *12, comm FROM emp;SELECT ename, (sal+250)*12 FROM emp;
Tiu ca ct (column alias)
Trong mnh SELECT, column alias l phn nhn hin th ca column khi ly s liu ra. Trong columnalias khng c c du cch v vit cch sau tn column mt du cch. Column alias c chp nhn cdu cch khi c t trong du nhy kp ().
V d: (ANUAL chnh l column alias)
SELECT ename, SAL*12 ANUAL, commFROM emp;
Ghp tip cc ct d liu
Ton t ghp tip chui (||) cho php ghp tip d liu trong cc ct khc nhau ca cng mt dng d liuvi nhau thnh mt chui. Ta c th c nhiu ton t ghp chui trong cng mt column alias.
V d:
SELECT empno||ename EMPLOYEEFROM emp;
Ghp tip chui k t
Trong mnh SELECT, ta c th thc hin ghp tip bt k k t no, biu thc hay s no m khng phil column hoc column alias.
V d:
SELECT empno || ename || WORK IN DEPARTMENT || deptno Employee Detail
FROM emp;
2.1.4. Phn bit gi tr d liu tr v
Trong thc t nhiu khi gi tr d liu trn ccdng d liu kt xut trng nhau. Gy nhiu bt tin. cth ly c ch cc dng d liu phn bit vi nhau. Ta s dng mnh DISTINCTtrong cu lnh truyvn.
V d:
SQL> SELECT deoptno FROM dept;DEPTNO
10
301020
14 rows selected.
SQL> SELECT DISTINCT deoptno FROM dept;DEPTNO
1030203 rows selected.
Trang 10
-
8/4/2019 Oracle PLSQL Chuan
12/104
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 ctvi bt c kiu d liu no cng c th c tr NULL, tr khi c n l kha hay c rng buc ton vn NOTNULL. 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;
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 nullkhi c tham s NULL, tr hm NVL v TRANSLATEc th tr v gi tr thc.
C php ca hm NVL:
NVL (DATECOLUMN,01-01-2001)NVL(NUMBERCOLUMN, 9)NVL(CHARCOLUMN,STRING)NVL(comm,0) tr v tr 0 khi comm l null
SELECT ename, sal*12 + NVL(comm,0) ANUAL_SAL FROM emp;
Trong cc hm lm vic vi nhm cc ct (group function): Hu ht cc hm lm vic trn nhm b qua trnull, 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 chkhng 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 NULLhoc IS NOT NULL. Nu trong biuthc 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 saukhng c mu tinno c chn
SELECT * FROM emp WHERE comm=NULL;
Nu mun chn cc nhn vin c comm l NULL th phi dng ton t IS NULL
SELECT * FROM emp WHERE comm IS NULL;
2.2.SQL*PLUS, CNG C TNG TC LNH SQL VI DATABASE
2.2.1. Cu lnh tng tc ca SQL*Plus
Oracle h tr cng c SQL*Plus cho php ngi s dng c th tng tc trc tip vi Oracle Server thngqua cc cu lnh SQL v PL/SQL.
Theo ngi s dng c th tng tc vi Oracle Server thng qua hai loi cu lnh:
Cu lnh SQL
Cu lnh ca bn thn chng trnh SQL*Plus
Trang 11
-
8/4/2019 Oracle PLSQL Chuan
13/104
Oracle c bn - SQL v PL/SQL
Hnh v 3. Cu lnh ca SQL*Plus
Khc bit gia lnh SQL v SQL*Plus
SQL
L ngn ng giao tip vi Oracle Servertrong vic truy xut d liu
Cu lnh da trn b k t chun ASCII
Thao tc trn cc d liu c trong cc bng
c nh ngha trong databaseCu lnh c np vo b nh m trnmt hoc nhiu dng
Cu lnh khng c vit tt
SQL*Plus
Nhn dng lnh SQL v gi lnh lnServer
Tu thuc vo tng phin bn ca Oracle Khng
thao tc vi d liu trong database
Cu lnh c ti trc tip khng thng qua bm
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 caliu chnh SQL*Plus
2.2.2. Phn nhm cu lnh trong SQL*Plus
Cc lnh SQL*Plus c th phn thnh nhm chnh sau:
Nhm lnh Din gii
Mi trng Tc ng v gy nh hng ti mi trng lm vic ca SQL*Plustrong phin lm vic hin ti.
nh dng d liu nh dng li d liu tr v t server
Thao tc file Lu gi, np v chy cc file scrips
Thc hin lnh Gi cc lnh SQL c trong b m ln server
Son tho Sa i li lnh SQL c trong b m
Trang 12
-
8/4/2019 Oracle PLSQL Chuan
14/104
Oracle c bn - SQL v PL/SQL
Tng tc Cho php ngi dng c th to cc bin s dng trong cu lnhSQL v thao tc vi cc bin nh: nhp d liu, kt xut d liu.
Cc lnh khc Cc lnh khc cho php kt ni ti c s d liu v hin th cc ctd liu theo nh nh dng.
2.2.3. Chi tit cc lnh SQL*Plus c bn
Kt ni ti CSDL
C php:
Conn[ect] /[@];
Vi:
user_name Tn truy nhppassword Mt khu truy nhpdatabase Tn database truy nhp
V d:
Conn Tester/tester@DB1;
Hin th cu trc bng d liu
C php:
Desc[ribe] ;
Vi:
table_name Tn bng cn hin th cu trc
V d:
Desc Dept;Name Null? Type
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)LOC VARCHAR2(13)
Lnh son tho
Tn lnh Din giiA[PPEND] text a thm on text vo dng hin tiC[HANGE] /old/new Chuyn on text c thnh on text mi trong dng hin
tiC[HANGE] /text/ Xo on text trong dng hin tiCL[EAR] BUFF[ER] Xo tt c cc dng trong SQL buffer
DEL Xo dng hin tiDEL n Xo dng nDEL m n Xo dng t m n nI[NPUT] Thm mt s dng nht nhI[NPUT] text Thm dng c cha textL[IST] Lit k ton b cc dng trong SQL buffer
Trang 13
-
8/4/2019 Oracle PLSQL Chuan
15/104
Oracle c bn - SQL v PL/SQL
L[IST] n
L[IST] m n
R[UN]
N
N text
0 text
Lnh thao tc file
Tn lnh
SAVE filename [.ext][REP[LACE]|APP[END]]
GET filename [.ext]
STA[RT] filename [.ext]
@ filename [.ext]
ED[IT]
ED[IT]filename [.ext ]
SPO[OL] filename [.ext ][OFF|OUT]
EXIT
Lnh nh dng ct d liuC php:
Lit k dng n
Lit k dng m n n
Hin th v chy lnh trong buffer
Nhy n dng n
Thay dng n bi on text
Chn 1 dng trc d
ng 1
Din gii
Ghi ni dung bufer thnh file. APPEND ghi thm vo file.REPLACE chn ln ni dung file c.
Ghi ni dung file vo buffer. Mc nh phn ui l .sql Chy cc
lnh trong file
Ging lnh Start
Son tho ni dung bufffer c tn l afiedt.buf chy ni dung
buffer dng lnh /
Son tho ni dung file
Ct kt qu hin th trn mn hnh ra file. Vd:SPOOL result.sql
SPOOL OFF
Thot khi SQL*Plus
COLUMN [{column | alias} [option]]
Tn lnh Din giiCLE[AR] Xo nh dng ca columnFOR[MAT] format Chuyn nh dng ca ct d liuHEA[DING] text t nhn co columnJUS[TIFY] align Cn tri - left , phi - right, gia - center cho nhnNOPRI[NT] n column
NUL[L] text Hin th text nu gi tr ca column l NULLPRI[NT} Hin th columnTRU[NCATED] Xo chui ti cui dng u tin khi hin thWRA[PPED] Ph cui chui ca dng tip theo
V d 1: Chnh nh dng v nhn ca column
Trang 14
-
8/4/2019 Oracle PLSQL Chuan
16/104
Oracle c bn - SQL v PL/SQL
COLUMN ename HEADING Employee|Name FORMAT A15COLUMN sal JUSTIFY LEFT FORMAT $ 99,990.00 COLUMNhiredate FORMAT A9 NULL Not hired
V d 2: Hin th nh dng hin ti ca column
COLUMNCOLUMN ename
V d 3: Xo nh dng hin ti ca column
COLUMN ename CLEARCLEAR COLUMN
Cc loi nh dng
nh dng Din gii V d Kt qu
An Hin th di nht n k t dng cho cc columndng k t hoc dng ngy
9 Hin th s, khng bao gm s 0 999999 1234
0 Hin th c s 0 099999 01234
$Hin thi $ $9999 $1234
L 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.3.BI TP
1. Chn ton b thng tin trong bng SALGRADEGRADE LOSAL HISAL
1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999
2. Chn ton b thng tin trong bng EMPEMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7839 KING PRESIDENT 17-11-1981 5000 107698 BLAKE MANAGER 7839 01-05-1981 2850 307782 CLARK MANAGER 7839 09-06-1981 2450 107566 JONES MANAGER 7839 02-04-1981 2975 207654 MARTIN SALESMAN 7698 28-09-1981 1250 1400 30
7499 ALLEN SALESMAN 7698 20-02-1981 1600 300 307844 TURNER SALESMAN 7698 08-09-1981 1500 0 307900 JAMES CLERK 7698 03-12-1981 950 307521 WARD SALESMAN 7698 22-02-1981 1250 500 307902 FORD ANALYST 7566 03-12-1981 3000 207369 SMITH CLERK 7902 17-12-1980 800 207788 SCOTT ANALYST 7566 09-12-1982 3000 207876 ADAMS CLERK 7788 12-01-1983 1100 207934 MILLER CLERK 7782 23-01-1982 1300 10
Trang 15
-
8/4/2019 Oracle PLSQL Chuan
17/104
Oracle c bn - SQL v PL/SQL
3. Hin th mi loingh nghipJOB
ANALYSTCLERKMANAGERPRESIDENTSALESMAN
4. Hin th tn nhn vin v thu nhp trong mt nm (REMUNERATION)ENAME REMUNERATION
KING 60000BLAKE 34200CLARK 29400JONES 35700MARTIN 16400ALLEN 19500TURNER 18000JAMES 11400WARD 15500FORD 36000
SMITH 9600SCOTT 36000ADAMS 13200MILLER 1560014 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 BLAKEHAS HELP THE POSITION OF MANAGER IN DEPT 30 SINCE 01-05-1981 CLARK HASHELP THE POSITION OF MANAGER IN DEPT 10 SINCE 09-06-1981 JONES HAS HELPTHE 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 THEPOSITION OF SALESMAN IN DEPT 30 SINCE 20-02-1981 TURNER HAS HELP THEPOSITION OF SALESMAN IN DEPT 30 SINCE 08-09-1981 JAMES HAS HELP THEPOSITION OF CLERK IN DEPT 30 SINCE 03-12-1981 WARD HAS HELP THE POSITIONOF SALESMAN IN DEPT 30 SINCE 22-02-1981 FORD HAS HELP THE POSITION OFANALYST IN DEPT 20 SINCE 03-12-1981SMITH HAS HELP THE POSITION OF CLERK IN DEPT 20 SINCE 17-12-1980SCOTT HAS HELP THE POSITION OF ANALYST IN DEPT 20 SINCE 09-12-1982ADAMS HAS HELP THE POSITION OF CLERK IN DEPT 20 SINCE 12-01-1983MILLER HAS HELP THE POSITION OF CLERK IN DEPT 10 SINCE 23-01-198214 rows selected.
6. Hin th cu trc bng emp;
7. Thay i nhn v nh dng hin th ca ct sal v hiredate trong bng emp;
Trang 16
-
8/4/2019 Oracle PLSQL Chuan
18/104
Oracle c bn - SQL v PL/SQL
Chng 3. TRUY VN D LIU C IU KIN
3.1.CC GII HN TRONG TRUY VN D LIU
Trongphn ln cc trng hp ly d liu t database, ta ch cn ly mt phn d liu ch khng cn ly ttc. hn ch cc d liu tr v khng cn thit, ta c th s dng mnh iu kin trong cu lnh truyvn.
Hnh v 4. Hn ch d liu tr v
3.1.1. Mnh WHERE
C php:
SELECT [DISTINCT ] {*, column [alias],...}FROM table
[WHERE condition (s)];
Vi:
column tn ct d liu tr valias tiu ca ct d liu tr vtable tn bng truy vn d liucondition mnh iu kin lc d liu tr v
Mnh WHEREdng t iu kin cho ton b cu lnh truy vn. Trong mnh WHEREc 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, SALFROM EMPWHERE SAL BETWEEN 1000 AND 2000 ;
Trang 17
-
8/4/2019 Oracle PLSQL Chuan
19/104
Oracle c bn - SQL v PL/SQL
Truy vn d liu vi nhiu iu kin
Mnh WHEREcho php ghp c nhiu iu kin thng qua cc ton t logic AND/OR. Ton t ANDyu cu d liu phi tho mn c 2 iu kin. Ton t ORcho php d liu tho mn 1 trong 2 iu kin.
V d:
SELECT DEPTNO, JOB, ENAME, SALFROM EMPWHERE SAL BETWEEN 1000 AND 2000AND JOB = MANAGER;
SELECT DEPTNO, JOB, ENAME, SALFROM EMPWHERE SAL BETWEEN 1000 AND 2000OR JOB = MANAGER;
SELECT DEPTNO, JOB, EMPNO, ENAME, SALFROM EMPWHERE SAL > 1500AND JOB = MANAGEROR JOB =SALESMAN;
SELECT DEPTNO, JOB, EMPNO, ENAME, SAL
FROM EMPWHERE SAL > 1500AND (JOB = MANAGEROR JOB =SALESMAN);
3.1.2. Cc ton t s dng trong mnh WHERE Ton t so
snh
Ton t
=
!=, ^=, '+,
>
=
-
8/4/2019 Oracle PLSQL Chuan
20/104
Oracle c bn - SQL v PL/SQL
Cc ton t logic
Ton t Din giiNOT Ph nh mnh AND Yu cu d liu phi tho mn c 2 iu kinOR Cho php d liu tho mn 1 trong 2 iu kin
Cp u tin khi thc hin i vi cc loi ton t
Cp u tin
1
2
3
4
Cc ton t so snhNOT
AND
OR
Ton t
3.1.3. V d s dng cc ton t iu kin
[NOT] BETWEEN x AND y
V d chn nhn vin c lng nm trong khong 2000 v 3000
SELECT * FROM emp WHERE sal BETEEN 2000 AND 3000;
IN (danh sch)
Chn nhn vin c lng bng mt trong2 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 WHEREename 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 stm 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
-
8/4/2019 Oracle PLSQL Chuan
21/104
Oracle c bn - SQL v PL/SQL
Ta cng c th dng mt k t bt k thay cho "\". Chng hn mnh sau c cng kt qu vi mnh trn
SELECT ename FROM emp WHERE ename LIKE '%A^_B%'; ESCAPE '^';
Ta gi cc k t nh "\" hay "^" ni trn l cc k t ESCAPE.
IS [NOT] NULLV 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 BYdng sp xp s liu c hin th v phi t v tr sau cng ca cu lnh truyvn.
V d:
SELECT ENAME, JOB, SAL*12, DEPTNOFROM EMPORDER 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, HIREDATEFROM EMPORDER BY HIREDATE DESC ;
3.2.2. Sp xp nhiu ct d liu tr v
Mnh Order cn c th sp xp nhiu column. Cc column cn sp xp c vit th t sau mnh ORDER BYv cch bi du phy (,). Column no gn mnh ORDER BYhn c mc u tin khi spxp cao hn. Ch nh cch thc sp xp ASC/DESC c vit sau column cch bi mt du cch.
V d:
SELECT DEPTNO, JOB, ENAME, SAL
Trang 20
-
8/4/2019 Oracle PLSQL Chuan
22/104
Oracle c bn - SQL v PL/SQL
FROM EMPORDER 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, SALFROM EMP
ORDER BY 2;
3.3.BI TP
1. Chn nhn vin trong bng EMP c mc lng t 1000 n 2000 (chn cc trngENAME, DEPTNO, SAL).
ENAME DEPTNO SAL
ALLEN 30 1600WARD 30 1250MARTIN 30 1250TURNER 30 1500ADAMS 20 1100MILLER 10 1300
2. Hin th m phng ban, tn phng ban, sp xp theo th t tn phng ban.DEPTNO DNAME
10 ACCOUNTING
40 OPERATIONS20 RESEARCH30 SALES
3. Hin th danh sch nhng nhn vin lm ti phng 10 v 20 theo th t A,B,CEMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7876 ADAMS CLERK 7788 12-01-1983 1100 207782 CLARK MANAGER 7839 09-06-1981 2450 107902 FORD ANALYST 7566 03-12-1981 3000 207566 JONES MANAGER 7839 02-04-1981 2975 207839 KING PRESIDENT 17-11-1981 5000 107934 MILLER CLERK 7782 23-01-1982 1300 107788 SCOTT ANALYST 7566 09-12-1982 3000 207369 SMITH CLERK 7902 17-12-1980 800 20
4. Hin th tn v ngh nghip nhng nhn vin lm ngh th k (cleck) ti phng 20.ENAME JOB
SMITH CLERKADAMS CLERK
Trang 21
-
8/4/2019 Oracle PLSQL Chuan
23/104
Oracle c bn - SQL v PL/SQL
5. Hin th tt c nhng nhn vin m tn c cc k t TH v LL.ENAME
SMITHALLENMILLER
6. Hin th tn nhn vin, ngh nghip, lng ca nhng nhn vin c gim c qunl.ENAME JOB SAL
SMITH CLERK 800ALLEN SALESMAN 1600WARD SALESMAN 1250JONES MANAGER 2975MARTIN SALESMAN 1250BLAKE MANAGER 2850CLARK MANAGER 2450SCOTT ANALYST 3000TURNER SALESMAN 1500ADAMS CLERK 1100JAMES CLERK 950FORD ANALYST 3000MILLER CLERK 1300
13 rows selected.
7. Hin th tn nhn vin, m phng ban, ngy gia nhp cng ty sao cho gia nhp cngty trong nm 1983.ENAME DEPTNO HIREDATE
ADAMS 20 12-JAN-83
8. Hin th tn nhn vin, lng mt nm (ANUAL_SAL), thng sao cho lng lnhn thng v ngh nghip l SALEMAN, sp theo th t lng gim dn v tn tngdn.ANUAL_SAL COMM
19200 30018000 015000 500
Trang 22
-
8/4/2019 Oracle PLSQL Chuan
24/104
Oracle c bn - SQL v PL/SQL
Chng 4. CC HM SQL
4.1.TNG QUAN V HM SQL
4.1.1. Cu trc hm SQL
Hm SQL l mt c im lm tng kh nng s dng cu lnh SQL. Hm SQL c th nhn nhiu tham s
vo v tr v ch mt gi tr.
Hnh v 5. Cu trc hm SQL
Hm SQL c mt s c im sau:
Thc hin vic tnh ton ngay trn d liu
C th thao tc, thay i ngay trn tng mc d liu tr v Hoc cng cth thao tc trn nhm cc d liu tr v
C th nh dng li cc d liu tr v c kiu s, hay kiu thi gian Cth chuyn i kiu d liu tr v
4.1.2. Phn loi hm SQL
Hm SQL c th phn ra lm hai loi:
Hm tc ng trn tng dng d liu: Gi tr tr v tng ng vi tng d liu uvo ti mi dng d liu.
Hm tc ng trn nhm cc dng d liu: Gi tr tr v tng ng vi cc php thaotc trn nhm d liu tr v.
Trang 23
-
8/4/2019 Oracle PLSQL Chuan
25/104
Oracle c bn - SQL v PL/SQL
Hnh v 6. Phn loi hm SQL
4.2.HM SQL THAO TC TRN TNG DNG D LIU
4.2.1. Cc hm thao tc trn kiu d liu s
u vo v u ra l cc gi tr kiu s
Mt s hm SQL hay dng
Hm SQL Din giiROUND(n[,m]) Cho gi tr lm trn ca n (n cp m, mc nhin m=0)TRUNC(n[,m]) Cho gi tr n ly m ch s tnh t chm thp phn
CEIL(n) Cho s nguyn nh nht ln hn hoc bng nFLOOR(n) Cho s nguyn ln nht bng hoc nh hn nPOWER(m,n) Cho ly tha bc n ca mEXP(n) Cho gi tr ca enSQRT(n) Cho cn bc 2 ca n, n>=0SIGN(n) Cho du ca n.
n0 c SIGN(n)= 1
ABS(n) Cho gi tr tuyt iMOD(m,n) Cho phn d ca php chia m cho n
Mt s hm kiu s tham kho khc
Hm SQL
LOG(m,n)
SIN(n)
Din gii
Cho logarit c s m ca n
Tr v cosin ca n (n tnh bng radian)
Trang 24
-
8/4/2019 Oracle PLSQL Chuan
26/104
Oracle c bn - SQL v PL/SQL
COS(n)
TAN(n)
V d hm ROUND(n[,m])
Cho cosin ca n (n tnh bng radian) Tr v
cotang ca n (n tnh bng radian)
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 (4.923,1),TRUNC (4.923),TRUNC (4.923,-1),
TRUNC (4.923,2)FROM DUMMY;
TRUNC(4.923,1) TRUNC(4.923) TRUNC(4.923,-1) TRUNC(4.923,2)
4.9 4 0 4.92
V d hm CEIL(n)
SELECT CEIL (SAL), CEIL(99.9),CEIL(101.76), CEIL(-11.1)FROM EMPWHERE SAL BETWEEN 3000 AND 5000;
CEIL(SAL) CEIL(99.9) CEIL(101.76) CEIL(-11.1)
5000 100 102 -113000 100 102 -113000 100 102 -11
V d hm FLOOR(n)
SELECT FLOOR (SAL), FLOOR (99.9), FLOOR (101.76), FLOOR (-11.1)FROM EMPWHERE SAL BETWEEN 3000 AND 5000;
FLOOR(SAL) FLOOR(99.9) FLOOR(101.76) FLOOR(-11.1)
5000 99 101 -123000 99 101 -123000 99 101 -12
V d hm POWER(m,n)
SELECT SAL, POWER(SAL,2), POWER(SAL,3), POWER(50,5)FROM EMPWHERE DEPTNO =10;
SAL POWER(SAL,2) POWER(SAL,3) POWER(50,5)
Trang 25
-
8/4/2019 Oracle PLSQL Chuan
27/104
Oracle c bn - SQL v PL/SQL
5000 25000000 1.2500E+11 3125000002450 6002500 1.4706E+10 3125000001300 1690000 2197000000 312500000
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 EMPWHERE DEPTNO =10;
SAL SQRT(SAL) SQRT(40) SQRT(COMM)
5000 70.7106781 6.324555322450 49.4974747 6.324555321300 36.0555128 6.32455532
V d hm SIGN(n)
SELECT SAL-NVL(COMM,0), SIGN(SAL-NVL(COMM,0)),NVL(COMM,0)-SAL, SIGN(NVL(COMM,0)-SAL)FROM EMPWHERE 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 11300 1 -1300 -11500 1 -1500 -1950 1 -950 -1750 1 -750 -1
4.2.2. Cc hm thao tc trn kiu d liu k t
Hm SQL thao tc trn kiu d liu l k t
Hm SQL
CONCAT(char1, char2)
INITCAP(char)
LOWER(char)
LPAD(char1, n [,char2])
Din gii
Cho kt hp ca 2 chui k t, tng t nh sdng ton t ||
Cho chui vi k t u cc t l k thoa
Cho chui k t vit thng (khng vithoa)
Cho chui k t c chiu di bng n. Nu chuichar1ngn hn n th thm vo bn tri chuichar2cho n k t. Nu chui char1di hn nth gi li n
Trang 26
-
8/4/2019 Oracle PLSQL Chuan
28/104
Oracle c bn - SQL v PL/SQL
k t tnh t tri sang
LTRIM(char1, n [,char2])
NLS_INITCAP(char)
REPLACE(char,search_string[,replacement_string])
RPAD(char1, n [,char2])
RTRIM(char1, n [,char2])
SOUNDEX(char)
SUBSTR(char, m [,n])
TRANSLATE(char, from, to)
UPPER(char)
ASCII(char)
INSTR(char1, char2 [,n[,m]])
LENGTH(char)
V d hm LOWER(char)
B cc k t trng bn tri
Cho chui vi k t u cc t l ch hoa, ccch cn li l ch thng
Thay tt c cc chui search_string c trongchuichar bng chui
replacement_string.Ging LPAD(char1, n [,char2])nhngcn phi.
B cc k t trng bn phi
Cho chui ng m ca char.
Cho chui con ca chui char ly t v tr m vphi n k t, nu khng ch n th ly cho ncui chui
Cho chui trong mi k t trong chuifrom thay bng k t tng ng trongchui to, nhng k t trong chui fromkhng c tng ng trong chui to s bloi b.
Cho chui ch hoa ca chui char
Cho k t ASCIIca byte u tin ca chui
char
Tm v tr chui char2 trong chuichar1 bt u t v tr n, ln xut hinth m.
Cho chiu di ca chui char
SELECT LOWER(DNAME), LOWER(SQL COURSE) FROM DEPT;
LOWER(DNAME) LOWER('SQL
accounting sql courseresearch sql coursesales sql courseoperations 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) INITCAP(LOC)
Trang 27
-
8/4/2019 Oracle PLSQL Chuan
29/104
Oracle c bn - SQL v PL/SQL
Accounting New YorkResearch DallasSales ChicagoOperations 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;
RPAD(DNAME,20,'*') RPAD(DNAME,20) RPAD(DEPTNO,20,'')
ACCOUNTING *** ACCOUNTING 10RESEARCH *** RESEARCH 20SALES *** SALES 30OPERATIONS *** OPERATIONS 40
V d hm SUBSTR(char, m [,n])
SELECT SUBSTR(ORACLE,2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5)FROM DEPT;
SUBS SUBSTR(DNAME, SUBST
RACL CCOUNTING COUNTRACL ESEARCH SEARCRACL ALES LESRACL PERATIONS 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
Trang 28
-
8/4/2019 Oracle PLSQL Chuan
30/104
Oracle c bn - SQL v PL/SQL
RESEARCH 5 2 0SALES 2 4 0OPERATIONS 5 0 0
V d hm LTRIM(char1, n [,char2])
SELECT DNAME, LTRIM(DNAME,A), LTRIM(DNAME,AS),LTRIM(DNAME,ASOP)
FROM DEPT;
DNAME LTRIM(DNAME,'A LTRIM(DNAME,'A LTRIM(DNAME,'A
ACCOUNTING CCOUNTING CCOUNTING CCOUNTINGRESEARCH RESEARCH RESEARCH RESEARCHSALES SALES LES LESOPERATIONS OPERATIONS OPERATIONS ERATIONS
V d hm RTRIM(char1, n [,char2])
SELECT DNAME, RTRIM(DNAME,A), RTRIM(DNAME,AS),RTRIM(DNAME,ASOP)FROM DEPT;
DNAME RTRIM(DNAME,'A RTRIM(DNAME,'A RTRIM(DNAME,'A
ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTINGRESEARCH RESEARCH RESEARCH RESEARCHSALES SALES SALES SALESOPERATIONS OPERATIONS OPERATIONS OPERATIONS
V d hm SOUNDEX(char)
SELECT ENAME, SOUNDEX(ENAME)FROM EMPWHERE SOUNDEX(ENAME)= SOUNDEX(FRED);
ENAME SOUN
FORD F630
V d hm LENGTH(char)
SELECT LENGTH(SQL COURSE), LENGTH(DEPTNO), LENGTH(DNAME)FROM DEPT;
LENGTH('SQLCOURSE') LENGTH(DEPTNO) LENGTH(DNAME)
10 2 1410 2 14
10 2 1410 2 14
V d hm TRANSLATE(char, from, to)
SELECT ENAME, TRANSLATE(ENAME,'C','F'), JOB,TRANSLATE(JOB,'AR','IT')FROM EMPWHERE DEPTNO = 10;
ENAME TRANSLATE( JOB TRANSLATE
Trang 29
-
8/4/2019 Oracle PLSQL Chuan
31/104
Oracle c bn - SQL v PL/SQL
KING KING PRESIDENT PTESIDENTCLARK FLARK MANAGER MINIGETMILLER MILLER CLERK CLETK
V d hm REPLACE(char,search_string[,replacement_string])
SELECT JOB, REPLACE(JOB, SALESMAN, SALESPERSON), ENAME,
REPLACE(ENAME, CO,PR)FROM EMPWHERE DEPTNO =30 OR DEPTNO =20;
JOB REPLACE(JOB,'SALESMAN', ENAME REPLACE(ENAME,'CO','
MANAGER MANAGER BLAKE BLAKEMANAGER MANAGER JONES JONESSALESMAN SALESPERSON MARTIN MARTINSALESMAN SALESPERSON ALLEN ALLENSALESMAN SALESPERSON TURNER TURNERCLERK CLERK JAMES JAMESSALESMAN SALESPERSON WARD WARDANALYST ANALYST FORD FORDCLERK CLERK SMITH SMITH
ANALYST ANALYST SCOTT SPRTTCLERK CLERK ADAMS 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 14RESEARCH 14 13SALES 14 12OPERATIONS 14 13
4.2.3. Cc hm thao tc trn kiu d liu thi gian Hm SQL
thao tc trn kiu d liu l thi gian.
Hm SQL
MONTH_BETWEEN(d1, d2)
ADD_MONTHS(d,n)
NEXT_DAY(d, char )
LAST_DAY(d)
Din gii
Cho bit s thng gia ngy d1 v d2. Cho ngy d
thm n thng.
Cho ngy tip theo ngy d c th ch bi char. Cho
ngy cui cng trong thng ch bi d.
V d hm MONTH_BETWEEN(d1, d2)
SELECT MONTHS_BETWEEN( SYSDATE, HIREDATE),MONTHS_BETWEEN('01-01-2000','05-10-2000')FROM EMPWHERE MONTHS_BETWEEN( SYSDATE,HIREDATE)>240;
MONTHS_BETWEEN(SYSDATE,HIREDATE) TWEEN('01-01-2000','05-10-2000')
Trang 30
-
8/4/2019 Oracle PLSQL Chuan
32/104
Oracle c bn - SQL v PL/SQL
241.271055 -9.1290323241.206539 -9.1290323243.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 ADD_MONTHS ADD_MONTHS
02-04-1981 02-07-1981 02-01-198103-12-1981 03-03-1982 03-09-198117-12-1980 17-03-1981 17-09-198009-12-1982 09-03-1983 09-09-198212-01-1983 12-04-1983 12-10-1982
V d hm NEXT_DAY(d, char )
SELECT HIREDATE, NEXT_DAY(HIREDATE,FRIDAY), NEXT_DAY(HIREDATE,6)
FROM EMPWHERE DEPTNO = 10;
HIREDATE NEXT_DAY(H NEXT_DAY(H
17-11-1981 20-11-1981 20-11-198109-06-1981 12-06-1981 12-06-198123-01-1982 29-01-1982 29-01-1982
V d hm LAST_DAY(d)
SELECT SYSDATE, LAST_DAY(SYSDATE), HIREDATE, LAST_DAY(HIREDATE),LAST_DAY(15-01-2001)FROM EMPWHERE DEPTNO =20;
SYSDATE LAST_DAY(S HIREDATE LAST_DAY(H LAST_DAY('
28-03-2001 31-03-2001 02-04-1981 30-04-1981 31-01-2001 28-03-2001 31-03-2001 03-12-1981 31-12-1981 31-01-2001 28-03-2001 31-03-2001 17-12-1980 31-12-1980 31-01-2001 28-03-2001 31-03-2001 09-12-1982 31-12-1982 31-01-2001 28-03-2001 31-03-2001 12-01-1983 31-01-1983 31-01-2001
Mt s hm khc c th p dng cho kiu ngy
Hm SQLROUND(date1)
ROUND(date1,MONTH)
ROUND(date1,YEAR)
TRUNC(date1, MONTH)
TRUNC(date1, YEAR)
Din gii
Tr v ngy date 1 ti thi im gia tra 12:00 AM
Nu date 1 nm trong na thng u tr v ngy u tin ca thng,ngcli s tr v ngy u tin ca thng sau.
Nu date 1 nm trong na nm u tr v ngy u tinca thng, ngc li s tr v ngy u tin ca nmsau.
Tr v ngy u tin ca thng cha date1 Tr v ngy u tin ca
nm cha date1
Trang 31
-
8/4/2019 Oracle PLSQL Chuan
33/104
Oracle c bn - SQL v PL/SQL
4.2.4. Cc hm chuyn i kiu
Hm SQL
TO_CHAR(number|date,fmt)TO_NUMBER(char)
TO_DATE(chsr,fmt)
DECODE(EXPR, SEARCH1,RESULT1, SEARCH2,RESULT2, DEFAULT):
NVL(COL|VALUE, VAL)
Greatest(col|value1,col|value2)
V d:
Din gii
Chuyn kiu s v ngy v kiu k t.
Chuyn k t c ni dung s sang s
Chuyn k t sang kiu ngy vi nh dng t trong
fmt.So snh biu thc expr vi gi tr search nu ng tr v gi trresult nu khng tr v gi tr default.
Chuyn gi tr COL|VALUE thnh valnu null. Tr gi tr
ln nht trong dy gi tr.
SELECT To_char (sysdate, day, ddth month yyyy) from dummy;
SELECT EMPNO, ENAME, HIREDATEFROM EMPWHERE HIREDATE = TO_DATE (June 4, 1984, month dd, yyyy);
INSERT INTO EMP (EMPNO, DEPTNO, HIREDATE
VALUES (777, 20, TO_DATE(19-08-2000, DD-MM-YYYY);
SELECT ENAME, JOB,DECODE (JOB, CLERK,WWORKER,MANAGER,BOSS,UNDEFINED)
DECODED_JOB
FROM EMP;
SELECT GREATEST(1000,2000), GREATEST(SAL,COMM) FROM EMPWHERE DEPTNO = 10;
Cc khun dng ngy
Hm SQL Din gii
SCC hoc CC Th k; S ch ngy BC
YYYYhoc SYYYY Nm; S ch ngy BC
YYY, YY, Y Ch nm vi 3,2,1 k t s
IYYY, IYY, IY, I Ch nm theo chun ISO
SYEAR, YEAR Ch nm theo cch pht m ca ngi anh;
Q Qu trong nm
MM Gi tr thng vi 2 s (01-12)MONTH Tn y ca thng theo ting anh, di 9
MON Thng vi 3 k t vin tt (JAN, FEB...)
WW, W Tun trong nm hoc trong thng
DDD, DD, D Ngy trong nm, thng hoc tun
DAY Ch th trong tun
DY Chth trong tun vi 3 k t vit tt
Trang 32
-
8/4/2019 Oracle PLSQL Chuan
34/104
Oracle c bn - SQL v PL/SQL
J
AM, PM
HH, HH12 HH24
MI
SSSSSSS
/ . , -
char
TH
SP
SPTH, THSP
RR
Nm
Nm hin t
Mt s khun dng s
K t
Ngy Julian; bt u t ngy 31/12/4713 trc cngnguyn
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 khit trong khun dng
Thm phn th t (1st, 2nd, 4th )
Pht m s ( FOUR vi DDSP)
Pht m v chuyn sang dng th t ( First, second, ...)
Ngy chuyn giao thin nin k vi cc nm
-
8/4/2019 Oracle PLSQL Chuan
35/104
Oracle c bn - SQL v PL/SQL
4.3.HM THAO TC TRN TP HP
4.3.1. Cc hm tc ng trn nhm
Cc hm tc ng trn nhm cc dng d liu hay tc ng ln mt tp hp cc cc dng d liu bao gm:
Hm SQL
AVG([DISTINCT/ALL] n)
COUNT([DISTINCT/ALL] expr)
MAX([DISTINCT/ALL] expr)
MIN([DISTINCT/ALL] expr)
STDDVE([DISTINCT/ALL] n)
SUM([DISTINCT/ALL] n)
VARIANCE([DISTINCT/ALL] n)
Din gii
Gi tr trung bnh ca n,khng k tr null S
row c expr khc null
Gi tr ln nht ca expr
Gi tr nh nht ca expr
Phng sai ca n khng k tr null Tng ca
ca n khng k tr null Variance ca n khng
k tr null
Ch : Tt c cc hm trn nhm mu tin u b qua gi tr NULL tr hm COUNT. Dng hm NVL chuyn i v tnh gi tr NULL.
C 2 cch dng cc cc hm ny
Tc ng trn ton b cc dng d liu ca cu lnh truy vnTc ng trn mt nhm d liu cng tnh cht ca cu lnh truy vn. Cng tnh cht
c ch bi mnh :[GROUP BY expr][HAVING condition]
V d: Tc ng trn ton b cc dng d liu ca cu lnh truy vn:
Tnh mc lng trung bnh ca ton b nhn vin
Select AVG(SAL)
FROM EMP;
Tnh mc lng thp nht ca nhn vin lm ngh CLERKSelect MIN(SAL)
FROM EMPWHERE JOB =CLERK:
V d: Tc ng trn mt nhm d liu cng tnh cht ca cu lnh truy vn.
Tnh mc lng trung bnh ca tng loi ngh nghip
SELECT JOB, AVG(SAL)
FROM EMPGROUP BY JOB;
Ch : Ch c cng t trong mnh SELECTcc hm nhm hoc cc column t trong mnh GROUP BY.
V d:
ng: SELECT MAX(SAL), JOBFROM EMPGROUP BY JOB;
Trang 34
-
8/4/2019 Oracle PLSQL Chuan
36/104
Oracle c bn - SQL v PL/SQL
Sai: SELECT MAX(SAL), JOBFROM EMP;
4.3.2. Mnh GROUP BY
C php:
SELECT [DISTINCT ] {*, column [alias],...}
FROM table;[WHERE condition][GROUP BY expr]
[HAVING condition]
[ORDER BY expr/position [DESC/ASC]]
Mnh GROUP BYs 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 HAVINGl t iu kin ca nhm d liu. Mnh ny khc mnh WHERE ch mnh WHEREt iu kin cho ton b cu lnh SELECT.
V d:
SELECT JOB, MAX(SAL)FROM EMPWHERE JOB !=MANAGERGROUP BY JOB;
JOB MAX(SAL)
ANALYST 3000CLERK 1300PRESIDENT 5000SALESMAN 1600
SELECT JOB, MAX(SAL)FROM EMPGROUP BY JOBHAVING COUNT(*)>3;
JOB MAX(SAL)
CLERK 1300SALESMAN 1600
SELECT JOB, MAX(SAL)FROM EMPHAVING MAX(SAL)>=3000
GROUP BY JOB;
JOB MAX(SAL)
ANALYST 3000PRESIDENT 5000
Trang 35
-
8/4/2019 Oracle PLSQL Chuan
37/104
Oracle c bn - SQL v PL/SQL
4.4.MT S HM MI B SUNG TRONG Oracle9i
4.4.1. Hm NULLIF
C php:
NULLIF(expr1, expr2)
Hm tr v gi tr NULL nu biu thc th nht bng biu thc th 2. Trong trng hp ngc li, n tr v
gi tr ca biu thc th nht.
4.4.2. Hm COALSCE
C php:
COALESCE(expr1, expr2, expr3, ...)
Tr v gi tr ca tham s u tin khc null
4.4.3. Cu lnh case
V d:
Case cu lnhSELECT ENAME, EXTRACT(YEAR FROM HIREDATE) AS YEAR_OF_HIRE,
(CASE EXTRACT(YEAR FROM HIREDATE)
WHEN 2002 THEN 'NEW HIRE'
WHEN 1997 THEN 'FIVE YEARS SERVICE'
WHEN 1992 THEN 'TEN YEARS SERVICE'
ELSE 'NO AWARD THIS YEAR'
END ) AS AWARD
FROM EMP;
CASE biu thcSELECT ENAME, SAL,
(CASE
WHEN JOB = DBA THEN SAL * 1.5
WHEN HIREDATE < SYSDATE - TO_YMINTERVAL(05-00) THEN SAL* 1.25
WHEN DEPTNO IN (40,30,10) THEN SAL * 1.1
ELSE SAL * .9
END ) AS NEW_SAL
FROM EMP;
4.5.BI TP
4.5.1. Hm trn tng dng d liu1. Lit k tn nhn vin, m phng ban v lng nhn vin c tng 15% (PCTSAL).
DEPTNO ENAME PCTSAL
10 KING 500030 BLAKE 285010 CLARK 245020 JONES 2975
Trang 36
-
8/4/2019 Oracle PLSQL Chuan
38/104
Oracle c bn - SQL v PL/SQL
30 MARTIN 125030 ALLEN 160030 TURNER 150030 JAMES 95030 WARD 125020 FORD 300020 SMITH 80020 SCOTT 300020 ADAMS 1100
10 MILLER 1300
2. Vit cu lnh hin th nh sau:EMPLOYEE_AND_JOB
KING*** *PRESIDENTBLAKE*** **MANAGERCLARK*** **MANAGERJONES*** **MANAGERMARTIN******SALESMANALLEN*** *SALESMANTURNER******SALESMANJAMES*** *CLERK
WARD*** **SALESMANFORD*** ***ANALYSTSMITH*** *CLERKSCOTT*** **ANALYSTADAMS*** *CLERKMILLER*** ***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 ManagerMARTIN 30 SalespersonALLEN 30 SalespersonTURNER 30 SalespersonJAMES 30 ClerkWARD 30 Salesperson
Trang 37
-
8/4/2019 Oracle PLSQL Chuan
39/104
Oracle c bn - SQL v PL/SQL
5. Tm ngy th 6 u tin cch 2 thng so vi ngy hin ti hin th ngy di dng 09February 1990.
6. Tm thng itn v tn nhn vin, ngy gia nhp cng ty ca nhn vin phng s 20,sao cho hin th nh sau:ENAME DATE_HIRED
JONES april,SECOND 1981FORD december,THIRD 1981SMITH december,SEVENTEENTH 1980SCOTT december,NINTH 1982ADAMS january,TWELFTH 1983
7. Hin th tn nhn vin, ngy gia nhp cng ty, ngy xt nng lng (sau ngy gianhp cng ty 1 nm), sp xp theo th t ngy xt nng lng.ENAME HIREDATE REVIEW
SMITH 17-12-1980 17-12-1981ALLEN 20-02-1981 20-02-1982WARD 22-02-1981 22-02-1982
JONES 02-04-1981 02-04-1982BLAKE 01-05-1981 01-05-1982CLARK 09-06-1981 09-06-1982TURNER 08-09-1981 08-09-1982MARTIN 28-09-1981 28-09-1982KING 17-11-1981 17-11-1982JAMES 03-12-1981 03-12-1982FORD 03-12-1981 03-12-1982MILLER 23-01-1982 23-01-1983SCOTT 09-12-1982 09-12-1983ADAMS 12-01-1983 12-01-1984
8. Hin th tn nhn vin v lng di dng
ENAME SALARY
ADAMS BELOW 1500ALLEN 1600BLAKE 2850CLARK 2450FORD 3000JAMES BELOW 1500JONES 2975KING 5000MARTIN BELOW 1500MILLER BELOW 1500SCOTT 3000SMITH BELOW 1500TURNER On Target
WARD 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 lil NO. Kim tra vi cc chui 12/34, 01/1a, 99\88VALUE VALID?
Trang 38
-
8/4/2019 Oracle PLSQL Chuan
40/104
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 lnhlng phi vo th 6, nhn vin ch c nhn lng sau t nht 15 ngy lm vic ticng ty, sp xp theo th t ngy gia nhp cng ty.
4.5.2. Hm trn nhm d liu1. Tm lng thp nht, ln nht v lng trung bnh ca tt c cc nhn vin
2. Tm lng nh nht v ln ca mi loi ngh nghip
3. Tm xem c bao nhiu gim c trong danh sch nhn vin.
4. Tm tt c cc phng ban m s nhn vin trong phng >3
5. Tm ra mc lng nh nht ca mi nhn vin lm vic cho mt gim c no sp xp theo th t tng dn ca mc lng.
Trang 39
-
8/4/2019 Oracle PLSQL Chuan
41/104
Oracle c bn - SQL v PL/SQL
Chng 5. LNH TRUY VN D LIU M RNG
5.1.KT HP D LIU T NHIU BNG
5.1.1. Mi lin kt tng ng
Mi lin kt tng ng c th hin trong mnh WHERE.
lin kt trong mnh WHEREphi ch r tn ca cc column v mnh c t tng ng.
V d:
emp.deptno =dept.deptno
Cc column trng tn phi c ch r column nm bng no thng qua tn hoc qua alias. Tn trngny c th t trong cc mnh khc nh SELECT, ORDER BY..
V d:
SELECT DEPT.DEPTNO, ENAME,JOB, DNAMEFROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNOORDER BY DEPT.DEPTNO;
SELECT A.DEPTNO, A.ENAME, A.JOB, B.DNAMEFROM EMP A, DEPT BWHERE A.DEPTNO = B.DEPTNOORDER BY A.DEPTNO;
5.1.2. Mi lin kt khng tng ng
Mi lin kt tng ng c th hin trong mnh WHERE.
lin kt trong mnh WHEREphi ch r tn ca cc column v mnh c t khng tng ng.
V d:WHERE E.SAL BETWEEN S. LOSAL AND S.HISAL
Cc column trng tn phi c ch r column nm bng no thng qua tn hoc qua alias. Tn trngny c th t trong cc mnh khc nh SELECT, ORDER BY..
V d:
SELECT E.ENAME,E.JOB, S.GRADEFROM EMP E, SALGRADE SWHERE E.SAL BETWEEN S. LOSAL AND S.HISAL;
Ch : iu kin lin kt ng l s cc bng-1 = s cc iu kin lin kt
5.1.3. Mi lin kt cng
Mi lin kt cng tr v c cc gi tr NULLtrong biu thc iu kin. Du (+) v no tnh thm cc gitr NULL v .
Mt cu lnh select ch t c 1 mi lin kt cng, du (+) t bn phi column lin kt
Trang 40
-
8/4/2019 Oracle PLSQL Chuan
42/104
Oracle c bn - SQL v PL/SQL
Trong mnh WHEREca mi lin kt cng khng c dng ton t INhoc OR ni cc iu kin linkt khc.
V d:
SELECT E.ENAME, D.DEPTNO, D.DNAMEFROM EMP E, DEPT DWHERE E.DEPTNO (+)=D.DEPTNOAND D.DEPTNO IN (30, 40);
ENAME DEPTNO DNAME
BLAKE 30 SALESMARTIN 30 SALESALLEN 30 SALESTURNER 30 SALESJAMES 30 SALESWARD 30 SALES
40 OPERATIONS
5.1.4. Lin kt ca bng vi chnh n (t thn)
C th lin kt bng vi chnh n bng cch t alias.
V du:
Select e.ename emp_name, e.sal emp_sal,m.ename mgr_name, m.sal mgr_sal
from emp e, emp mwhere e.mgr = m.empnoand e.sal
-
8/4/2019 Oracle PLSQL Chuan
43/104
Oracle c bn - SQL v PL/SQL
SELECT E.ENAME, D.DNAMEFROM EMP E JOIN DEPT D USING (DEPTNO);
Mnh ON (Ch r tn ct tham gia trong php kt ni)
SELECT E.ENAME, D.DNAME
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);
Kt ni tri LEFT OUTERJOIN
SELECT E.ENAME, D.DNAME
FROM EMP E LEFT OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);
Kt ni tri RIGHT OUTER JOIN
SELECT E.ENAME, D.DNAME
FROM EMP E RIGHT OUTER JOIN DEPT D ON (E.DEPTNO= D.DEPTNO);
Kt ni FULL OUTER JOIN (All records from both tablesIdentical to a union of left outer join and rightouter join)
SELECT E.ENAME, D.DNAME
FROM EMP E FULL OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);
5.1.6. Cc ton t tp hp
Tn ton t
UNION
Din gii
Kt hp kt qu ca nhiu cu hi vi nhau, ch gi li mt i din cho cc mu tin
trng nhau.UNION ALL Kt hp kt qu ca nhiu cu hi vi nhau, cc mu tin trng nhau
cng c lp li
INTERSET
MINUS
V d:
Ly phn giao cc kt qu ca nhiu cu hi
Ly kt qu c trong cu hi th nht m khng c trong cu hi th hai (cu hi sauton t MINUS)
Select job from emp where deptno = 10UnionSelect job from emp where deptno = 30;
JOB
CLERK
MANAGERPRESIDENTSALESMAN
Trang 42
-
8/4/2019 Oracle PLSQL Chuan
44/104
Oracle c bn - SQL v PL/SQL
5.2.LNH TRUY VN LNG5.2.1. Cu lnh SELECT lng nhau.
Trong mnh WHERE
Tm nhng nhn vin lm cng ngh vi BLAKE
select ename, job
from emp
where job = (select job from emp where ename = BLAKE);
ENAME JOB
BLAKE MANAGERCLARK MANAGERJONES MANAGER
Trong mnh HAVING
Tm nhng phng c mc lng trung bnh ln hn phng 30
SELECT DEPTNO, AVG(SAL) FROM EMPHAVING AVG(SAL) > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO =30)GROUP BY DEPTNO;
DEPTNO AVG(SAL)
10 2916.6666720 2175
5.2.2. Ton t SOME/ANY/ALL/NOT IN/EXITS
Tn ton t
NOT IN
ANY v SOME
ALL
EXISTS
V d:
Din gii
Khng thuc
So snh mt gi tr vi mi gi tr trong mt danh sch hay trong kt qu tr vca cu hi con, phi sau ton t =
So snh mt gi tr vi mi gi tr trong danh sch hay trong kt qu tr v cacu hi con.
Tr v TRUEnu c tn ti.
SELECT * FROM empWHERE sal = ANY (SELECT sal FROM emp WHERE deptno=30);
SELECT * FROM empWHERE sal >= ALL (select distinct salFrom empWhere deptno =30)Order by sal desc;
SELECT ENAME, SAL, JOB, DEPTNOFROM EMPWHERE SAL > SOME (SELECT DISTINCT SAL
FROM EMPWHERE DEPTNO =30)
Trang 43
-
8/4/2019 Oracle PLSQL Chuan
45/104
Oracle c bn - SQL v PL/SQL
ORDER BY SAL DESC;
Tm nhng ngi c nhn vin
SELECT EMPNO, ENAME, JOB, DEPTNOFROM EMP E
WHERE EXISTS (SELECT EMPNO FROM EMP WHERE EMP.MGR = E.EMPNO);
5.3.CU TRC HNH CY
5.3.1. Cu trc hnh cy trong 1 table
Trong mt table ca CSDL Oracle c th hin cu trc hnh cy. V d trong bng EMP cu trc th hin cp qun l.
Root node: l node cp cao nht
Child node: l node con hay khng phi l root node Parentnode: l node c node con
Leaf node: l node khng c node con
Level (cp)
Level l mt ct gi cha cp trong cu trc hnh cy. V d.
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SALFROM EMPCONNECT BY PRIOR EMPNO = MGRSTART WITH MGR is NULL;
LEVEL DEPTNO EMPNO ENAME JOB SAL
1 10 7839 KING PRESIDENT 50002 30 7698 BLAKE MANAGER 28503 30 7654 MARTIN SALESMAN 1250
3 30 7499 ALLEN SALESMAN 16003 30 7844 TURNER SALESMAN 15003 30 7900 JAMES CLERK 9503 30 7521 WARD SALESMAN 12502 10 7782 CLARK MANAGER 24503 10 7934 MILLER CLERK 13002 20 7566 JONES MANAGER 29753 20 7902 FORD ANALYST 30004 20 7369 SMITH CLERK 8003 20 7788 SCOTT SALEMAN 33004 20 7876 ADAMS CLERK 1100
5.3.2. K thut thc hin
C th nh ngha quan h tha k trong cu hi bng mnh STAR WITH v CONNECT BY trong culnh SELECT, mi mu tin l mt node trong cy phn cp. Ct gi LEVELcho bit cp ca mu tin hay cpca node trong quan h tha k.
C php:
SELECT [DISTINCT/ALL] [expr [c_ias]]FROM [table/view/snapshot] [t_alias][WHERE condition][START WITH condition CONNECT BY PRIOR condition]
[GROUP BY expr] [HAVING condition][UNION/UNION ALL/INTERSET/MINUS select command]
Trang 44
-
8/4/2019 Oracle PLSQL Chuan
46/104
Oracle c bn - SQL v PL/SQL
[ORDER BY expr/position [DESC/ASC]]
Vi:
START WITH c t im u ca hnh cy. Khng th columngi 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 hnhcy hng ln. Nu prior xut hin trc empno,empno s c tm trc sau n empno, y lhnh cy hng xung.
V d:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SALFROM EMPCONNECT BY PRIOR MGR = EMPNO
START WITH empno = 7876;
LEVEL DEPTNO EMPNO ENAME JOB SAL
1 20 7876 ADAMS CLERK 11002 20 7788 SCOTT SALEMAN 33003 20 7566 JONES MANAGER 29754 10 7839 KING PRESIDENT 5000
5.3.3. Mnh WHERE trong cu trc hnh cy
Mnh WHERE v CONNECT BY c th c dng ng thi trong cu trc hnh cy. Nu
mnh WHERE loi tr mt s row ca cu trc hnh cy th ch nhng row c loi
tr. Nu iu kin t trong mnh CONNECT BY th ton b nhnh ca row b loi tr.
V d 1:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SAL
FROM EMP WHERE ENAME != SCOTTCONNECT BY PRIOR EMPNO = MGRSTART WITH MGR IS NULL;
LEVEL DEPTNO EMPNO ENAME JOB SAL
1 10 7839 KING PRESIDENT 50002 30 7698 BLAKE MANAGER 28503 30 7654 MARTIN SALESMAN 12503 30 7499 ALLEN SALESMAN 16003 30 7844 TURNER SALESMAN 15003 30 7900 JAMES CLERK 9503 30 7521 WARD SALESMAN 12502 10 7782 CLARK MANAGER 24503 10 7934 MILLER CLERK 13002 20 7566 JONES MANAGER 29753 20 7902 FORD ANALYST 30004 20 7369 SMITH CLERK 8004 20 7876 ADAMS CLERK 1100
V d 2:
SELECT LEVEL, DEPTNO, EMPNO, ENAME, JOB, SALFROM EMPCONNECT BY PRIOR EMPNO = MGR AND ENAME != SCOTT
Trang 45
-
8/4/2019 Oracle PLSQL Chuan
47/104
Oracle c bn - SQL v PL/SQL
START WITH MGR IS NULL;
LEVEL DEPTNO EMPNO ENAME JOB SAL
1 10 7839 KING PRESIDENT 50002 30 7698 BLAKE MANAGER 28503 30 7654 MARTIN SALESMAN 12503 30 7499 ALLEN SALESMAN 16003 30 7844 TURNER SALESMAN 1500
3 30 7900 JAMES CLERK 9503 30 7521 WARD SALESMAN 12502 10 7782 CLARK MANAGER 24503 10 7934 MILLER CLERK 13002 20 7566 JONES MANAGER 29753 20 7902 FORD ANALYST 30004 20 7369 SMITH CLERK 800
5.4.BI TP
1. Hin th ton b tn nhn vin v tn phng ban lm vic sp xp theo tn phngban.
2. Hin th tn nhn vin, v tr a l, tn phng vi iu kin lng >1500.ENAME LOC DNAME
KING NEW YORK ACCOUNTINGBLAKE CHICAGO SALESCLARK NEW YORK ACCOUNTINGJONES DALLAS RESEARCHALLEN CHICAGO SALESFORD DALLAS RESEARCHSCOTT DALLAS RESEARCH
3. Hin th tn nhn vin, ngh nghip, lng v mc lng.ENAME JOB SAL GRADE
JAMES CLERK 950 1SMITH CLERK 800 1ADAMS CLERK 1100 1MARTIN SALESMAN 1250 2WARD SALESMAN 1250 2MILLER CLERK 1300 2ALLEN SALESMAN 1600 3TURNER SALESMAN 1500 3BLAKE MANAGER 2850 4CLARK MANAGER 2450 4JONES MANAGER 2975 4FORD ANALYST 3000 4
SCOTT ANALYST 3000 4KING PRESIDENT 5000 5
4. Hin th tn nhn vin, ngh nghip, lng v mc lng, vi iu kin mclng=3.ENAME JOB SAL GRADE
ALLEN SALESMAN 1600 3TURNER SALESMAN 1500 3
Trang 46
-
8/4/2019 Oracle PLSQL Chuan
48/104
Oracle c bn - SQL v PL/SQL
5. Hin th nhng nhn vin ti DALLASENAME LOC SAL
JONES DALLAS 2975FORD DALLAS 3000SMITH DALLAS 800SCOTT DALLAS 3000
ADAMS DALLAS 1100
6. Hin th tn nhn vin , ngh nghip, lng, mc lng, tn phng lm vic tr nhnvin c ngh l cleck v sp xp theo chiu gim.ENAME JOB SAL GRADE DNAME
MARTIN SALESMAN 1250 2 SALESWARD SALESMAN 1250 2 SALESALLEN SALESMAN 1600 3 SALESTURNER SALESMAN 1500 3 SALESBLAKE MANAGER 2850 4 SALESCLARK MANAGER 2450 4 ACCOUNTINGJONES MANAGER 2975 4 RESEARCH
FORD ANALYST 3000 4 RESEARCHSCOTT ANALYST 3000 4 RESEARCHKING PRESIDENT 5000 5 ACCOUNTING
7. Hin th chi tit v nhng nhn vin kim c 36000 $ 1 nm hoc ngh l cleck.(gm cc trng tn, ngh, thu nhp, m phng, tn phng, mc lng)ENAME JOB ANUAL_SAL DNAME GRADE
JAMES CLERK 11400 SALES 1SMITH CLERK 9600 RESEARCH 1ADAMS CLERK 13200 RESEARCH 1MILLER CLERK 15600 ACCOUNTING 2FORD ANALYST 36000 RESEARCH 4
SCOTT 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 nhnvin, tn nhn vin, m ngi qun l, tn ngi qun lEMP_NAME EMP_SAL MGR_NAME MGR_SAL
BLAKE 2850 KING 5000CLARK 2450 KING 5000
JONES 2975 KING 5000MARTIN 1250 BLAKE 2850ALLEN 1600 BLAKE 2850TURNER 1500 BLAKE 2850JAMES 950 BLAKE 2850WARD 1250 BLAKE 2850FORD 3000 JONES 2975SMITH 800 FORD 3000SCOTT 3000 JONES 2975ADAMS 1100 SCOTT 3000MILLER 1300 CLARK 2450
Trang 47
-
8/4/2019 Oracle PLSQL Chuan
49/104
Oracle c bn - SQL v PL/SQL
10. Nh cu 9 hin th thm thng tin v ng KING.EMP_NAME EMP_SAL MGR_NAME MGR_SAL
KING 5000BLAKE 2850 KING 5000CLARK 2450 KING 5000JONES 2975 KING 5000
MARTIN 1250 BLAKE 2850ALLEN 1600 BLAKE 2850TURNER 1500 BLAKE 2850JAMES 950 BLAKE 2850WARD 1250 BLAKE 2850FORD 3000 JONES 2975SMITH 800 FORD 3000SCOTT 3000 JONES 2975ADAMS 1100 SCOTT 3000MILLER 1300 CLARK 2450
11. Hin th ngh nghip c tuyn dng vo nm 1981 v khng c tuyn dng vonm 1994.
12. Tm nhng nhn vin gia nhp cng ty trc gim c ca h.
13. Tm tt c cc nhn vin, ngy gia nhp cng ty, tn nhn vin, tn ngi gim cv ngy gia nhp cng ty ca ngi gim c y.EMP_NAME EMP_SAL MGR_NAME MGR_SAL
BLAKE 2850 BLAKE 2850MARTIN 1250 BLAKE 2850ALLEN 1600 BLAKE 2850TURNER 1500 BLAKE 2850JAMES 950 BLAKE 2850
WARD 1250 BLAKE 2850CLARK 2450 CLARK 2450MILLER 1300 CLARK 2450JONES 2975 JONES 2975FORD 3000 JONES 2975SMITH 800 JONES 2975SCOTT 3300 JONES 2975ADAMS 1100 JONES 297513 rows selected.
14. Tm nhng nhn vin kim c lng cao nht trong mi loi ngh nghip.JOB MAX(SAL)
ANALYST 3000CLERK 1300MANAGER 2975PRESIDENT 5000SALESMAN 1600
15. Tm mc lng cao nht trong mi phng ban, sp xp theo th t phng ban.ENAME JOB DEPTNO SAL
KING PRESIDENT 10 5000
Trang 48
-
8/4/2019 Oracle PLSQL Chuan
50/104
Oracle c bn - SQL v PL/SQL
SCOTT SALEMAN 20 3300BLAKE MANAGER 30 2850
16. Tm nhn vin gia nhp vo phng ban sm nhtENAME HIREDATE DEPTNO
CLARK 09-06-1981 10
SMITH 17-12-1980 20ALLEN 20-02-1981 30
17. Hin th nhng nhn vin c mc lng ln hn lng TB ca phng ban m h lmvic.
EMPNO ENAME SAL DEPTNO
7839 KING 5000 107566 JONES 2975 207902 FORD 3000 207788 SCOTT 3300 207698 BLAKE 2850 307499 ALLEN 1600 30
18. Hin th tn nhn vin, m nhn vin, m gim c, tn gim c, phng ban lmvic ca gim c, mc lng ca gim c.
EMP_NUMBER EMP_NAME EMP_SAL MGR_NUMBER MGR_NAME MGR_DEPT MGR_GRADE
7698 BLAKE 2850 7698 BLAKE 30 47654 MARTIN 1250 7698 BLAKE 30 47499 ALLEN 1600 7698 BLAKE 30 47844 TURNER 1500 7698 BLAKE 30 47900 JAMES 950 7698 BLAKE 30 47521 WARD 1250 7698 BLAKE 30 47782 CLARK 2450 7782 CLARK 10 47934 MILLER 1300 7782 CLARK 10 47566 JONES 2975 7566 JONES 20 4
7902 FORD 3000 7566 JONES 20 47369 SMITH 800 7566 JONES 20 47788 SCOTT 3300 7566 JONES 20 47876 ADAMS 1100 7566 JONES 20 4
13 rows selected.
Trang 49
-
8/4/2019 Oracle PLSQL Chuan
51/104
Oracle c bn - SQL v PL/SQL
Chng 6. BIN RUNTIME
6.1.D LIU THAY TH TRONG CU LNH
Dng (&) ch phn thay th trong cu lnh.
Nu dng (&&) ch bin thay th th sau cu lnh bin thay th vn cn tn ti V d 1:
SELECT * FROM empWHERE &Condition
Enter value for condition: sal > 1000
Khi ny cu lnh trn tng ng vi:
SELECT * FROM emp
WHERE sal > 1000
V du 2:
Select ename, deptno, jobFrom empWhere deptno = &&depno_please;
6.2.LNH DEFINE
Khai bo v gn tr cho cc bin, v d khai bo bin condition c gi tr 'sal > 1000'
DEFINE condition = 'sal > 1000'
Khi cu lnh sau khng yu cu nhp vo gi tr cho codition
SELECT * FROM empWHERE &Condition
loi b bin ra khi b nh dng lnh UNDEFINE. V d:
UNDEFINE condition
lit k cc bin khai bo dng lnh DEFINEm khng ch bin, v d
DEFINEDEFINE CONDITION = 'SAL > 1000'
V d:
DEFINE REM=SAL*12+NVL(COMM,0)
SELECT ENAME, JOB, &REM
FROM EKP ORDER BY & REM;
Trang 50
-
8/4/2019 Oracle PLSQL Chuan
52/104
Oracle cbn - 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: ' HIDEPassword : ***
6.4.BI TP
1. Hin th tn nhn vin, ngy gia nhp cng ty vi iu kin ngy gia nhp cng tynm 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 iukin 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 tmnhng 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 mtbin c nhp vo t bn phm.ENAME LENGTH OF SERVICE
KING 19 YEAR 4 MONTHS
Trang 51
-
8/4/2019 Oracle PLSQL Chuan
53/104
Oracle c bn - SQL v PL/SQL
Chng 7. TABLE V CC LNH SQL V TABLE
7.1.LNH TO TABLE
7.1.1. C php to bng
to mt bng mi dng lnh CREATE TABLE. C
php:
CREATE TABLE tablename
(column [datatype][DEFAULT expr][column_constraint]..)[PCTFREE integer][PCTUSED integer][INITRANS integer][MAXTRANS integer][TABLESPACE tablespace][STORAGE storage_clause][AS subquery]
Vi:
tablename Tn table cn tocolumn Tn column trong table[datatype] Kiu d liu ca column[DEFAULT expr] Gi tr mc nh ca column trong trng hp
NULL l expr[column_constraint] Rng buc ca bn thn column[table_constraint] Rng buc ca ton bng[PCTFREE integer] Phn trm khng gian cn trng[PCTUSED integer] Phn trm khng gian s dng[INITRANS integer] S bn ghi khi to[MAXTRANS integer] S bn ghi ln nht[TABLESPACE tablespace]
Ch nh TABLESAPCE chobng[STORAGE storage_clause]
Ghi mnh lu tr, n v mc nh l KB trong cc cc chn la l: INITIAL - dung lng khito; 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
CONSTRAINT UPPER_ENAME CHECK (ENAME=UPPER(ENAME)),JOB VARCHAR2(9),MGR NUMBER CONSTRAINT FK_MGR REFERENCES
SCOTT.EMP(EMPNO),
HIREDATE DATE DEFAULT SYSDATE, SALNUMBER(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
-
8/4/2019 Oracle PLSQL Chuan
54/104
Oracle c bn - SQL v PL/SQL
(GRADE NUMBER CONSTRAINT PK_SALGRADE PRIMARY KEY,LOSAL NUMBER,HISAL NUMBER)TABLESPACE USERSTORAGE (INITIAL 6144 NEXT 6144MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5)
V d 3:CREATE TABLE DEPT10
ASSELECT EMPNO, ENAME, JOB, SALFROM EMP WHERE DEPTNO =10;
V d 4:
CREATE TABLE EMP_SAL (NAME, SALARY,GRADE)ASSELECT ENAME, SAL, GRADE
FROM EMP, SALGARDEWHERE 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 cctable li nu c th.
Ch nh cc thng s pcfree v pctused C thch nh 2 thng s initstran, maxtransC th chnh tablespace cho table
C th c lng kch thc table, v cc thng s cho storage.
7.1.2. Tnh ton kch thc table (tham kho)
1. Tnh ton khong a cn thit cho data block header. Tnh theo
cng thc sau:
BLOCK HEADER = (FIXED HEADER + VARIABLE TRANSACTION HEADER) +(TABLE DIRECTORY + ROW DIRECTORY)
Trong :
fixed header = 57 bytes
variable transaction header = 23*gi tr ca thng s instranstable directory =4
row directory = 2* s lng row trong block.
2. Tnh ton khong a trng cha d liu ca data block. Tnh theo cng thc sau:Khong a trng cha data =(block size -total block header) -(block size -(fixed header+ variable transaction
header))*(pctree/100)
C th bit block size bng cch dng lnh
show parameters db_block_size.
Trang 53
-
8/4/2019 Oracle PLSQL Chuan
55/104
Oracle c bn - SQL v PL/SQL
3. Tnh ton khong a trng kt hp bng gi tr ca mi row.
4. Tnh ton kch thc trung bnh ca row:Kch thc trung bnh ca row = row header +A+B+CA = Tng chiu di ca cc ct 250 byteC = 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 blockBlock = s row / s row trung bnh cho mt block
7.2.MT S QUY TC KHI TO TABLE
7.2.1. Quy tc t tn ObjectTn 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 tTn 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) Tnkhng 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 chhoa ch thng.
Tn phi duy nht trong "khng gian tn" nht nh. Cc object thuc cng khnggian 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 ccthnh 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 vykhng p dng quy tc 9 v khng gian tn.
Mt khu khng thuc v khng gian tn no v do cng khng p dng quy tc 9. Nn t tn
theo mt quy tc t tn thng nht
7.2.2. Quy tc khi tham chiu n Object C php chungkhi tham chiu n cc object
S chung khi tham chiu cc object hoc thnh phn ca cc object
Schema.Object.Part.@dblink
Trong :
object Tn object
Trang 54
-
8/4/2019 Oracle PLSQL Chuan
56/104
Oracle c bn - SQL v PL/SQL
schema Schema cha objectpart Thnh phn ca objectdblink 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 objecttrong khng gian tn. Sau khi xc nh cc object, Oracle thc hin cc thao tc m cu lnh quy nh trnobject. Nu tn object truy cp khng thuc khng gian tn th cu lnh khng c thc hi n v c thngbo 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 viewng 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 muntruy 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 chaobject mun truy cp. Database link l mt schema object, Oracle dng thm nhp v truy xut CSDL txa.
7.3.Cc Kiu d liu c bn
7.3.1. Kiu CHAR
Kiu CHARdng khai bo mt chui c chiu di c nh, khi khai bo bin hoc ct kiu CHARvichiu di ch nh th tt c cc mc tin ca bin hay ct ny u c cng chiu di c ch nh. Cc mctin ngn hn Oracle s t ng thm vo cc khong trng cho chiu di. Oracle khng cho php gn mctin di hn chiu di ch nh i vi kiu CHAR. Chiu di ti a cho php ca kiu CHAR l 255 byte
7.3.2. Kiu VARCHAR2
Kiu VARCHAR2dng khai bo chui k t vi chiu di thay i. Khi khai bo mt bin hoc ct kiuVARCHAR2phi ch ra chiu di ti a, cc mc tin cha trong bin hay ct kiu VARCHAR2c chiu dithc s l chiu di ca mc tin. Oracle khng cho php gn
Trang 55
-
8/4/2019 Oracle PLSQL Chuan
57/104
Oracle c bn - SQL v PL/SQL
mc tin di hn chiu di ti a ch nh i vi kiu VARCHAR2. Chiu di ti a kiu VARCHAR2 l 2000byte.
7.3.3. Kiu VARCHAR
Hin ti Oracle xem kiu VARCHAR2 v VARCHAR l nh nhau, tuy nhin Oracle khuyn nndng 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 khcnhau.
7.3.4. Kiu NUMBER
Kiu s ca Oracle dng cha cc mc tin dng s dng, s m, s vi du chm ng.
NUMBER(p, s)p S ch s trc du chm thp phn (precision), p t 1
n 38 ch ss 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 vscale bng 0
NUMBER S vi du chm ng vi precision bng 38. Nh rngscale 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 vscale khc nhau.
D liu thc Kiu Gi tr lu tr7456123.89 NUMBER 7456123.89
7456123.89 NUMBER(9) 74561237456123.89 NUMBER(9,2) 7456123.897456123.89 NUMBER(9,1) 7456123.87456123.89 NUMBER(6) Khng hp l7456123.8 NUMBER(15,1) 7456123.87456123.89 NUMBER(7,-2) 74561007456123.89 NUMBER(-7,2) Khng hp l
7.3.5. Kiu FLOAT
Dng khai bo kiu s du chm ng, vi chnh xc thp phn 38 hay chnh xc nh phn l 126.
FLOAT(b)Khai bo kiu du chm ng vi chnh xc nh phn l b, b t 1 n 126. C th chuyn t chnh xc nh phn sang chnh xc thp phn bng cch nhn chnh xc nh phn vi 0.30103
7.3.6. Kiu LONG
Dng khai bo kiu chui k t vi di bin i, chiu di ti a ca kiu LONGl 2 gigabyte. KiuLONGthng c dng cha cc vn bn.
C mt s hn ch khi dng kiu LONG
Trang 56
-
8/4/2019 Oracle PLSQL Chuan
58/104
Oracle c bn - SQL v PL/SQL
Mt table khng th cha nhiu hn mt ct kiu LONG
D liu kiu LONG khng th tham gia vo cc rng buc ton vn, ngoi tr kim traNULL v khc NULL
Khng th index mt ct kiu LONG
Khng th truyn tham s kiu LONGcho 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 ccbng ch cho php trong cng mt CSDL
Ngoi ra, cc ct kiu LONG khng c tham gia trong cc thnh phn sau ca cu lnhSQL
Cc mnh WHERE, GROUP BY, ORDER BY, CONNECT BY hoc vi tc tDISTINCTtrong cu lnh SELECT
Cc hm s dng trong cu lnh SQL nh SUBSTR, INSTR
Trong danh sch la chn ca cu lnh SELECTc s dng mnh GROUP BYTrong
danh sch la chn ca cu hi con, cu hi c s dng cc ton t tp hp Trong danh sch la
chn ca cu lnh CREATE TABLE AS SELECT
7.3.7. Kiu DATE
Dng cha d liu ngy v thi gian. Mc d kiu ngy v thi gian c th c cha trong kiu CHARv NUMBER.
Vi gi tr kiu DATE, nhng thng tin c lu tr gm th k, nm, thng, ngy, gi, pht, giy. Oraclekhng cho php gn gi tr kiu ngy trc tip, gn gi tr kiu ngy, bn phi dng TO_DATE chuyngi 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 trkiu ngy m khng ch ra ngy, th ngy mc nh l ngy u ca thng. Hm SYSDATEcho bit ngy vthi gian h thng.
Tnh ton i vi kiu ngy
i vi d liu kiu ngy, bn cth thc hin cc php ton cng v tr. V d:
SYSDATE+1 ngy hm sauSYSDATE-7 cch y mt tunSYSDATE+(10/1440) mi pht sau
Ngy Julian: L gi tr s cho bit s ngy k t ngy 1 thng ging nm 4712 trc cng nguyn.
V d:
SELECT TO_CHAR (TO_DATE('01-01-1992', 'MM-DD-YYYY'), 'J') JULIANFROM DUAL;
Kt qu:
JULIAN
2448623
Trang 57
-
8/4/2019 Oracle PLSQL Chuan
59/104
Oracle c bn - SQL v PL/SQL
7.3.8. Kiu RAW v kiu LONG RAW
Kiu RAW v LONG RAWdng cha cc chui byte, cc d liu nh phn nh hnh nh, m thanh. Cc dliu kiu RAWch c th gn hoc truy cp ch khng c thc hin cc thao tc nh i vi chui k t.
Kiu RAWging nh kiu VARCHAR2v kiu LONG RAWging kiu LONG, ch khc nhau ch Oracle tng chuyn i cc gi tr kiu CHAR, VARCHAR2 v LONGgia tp hp k t ca CSDL v tp k t cacc ng dng.
7.3.9. Kiu ROWID
Mi mu tin trong CSDL c mt a ch c kiu ROWID. ROWID bao gm cc thnh phn:
block.row.file.
Vi
block Chui h hexa cho bit block cha rowrow Chui h hexa cho bit row trong blockfile Chui h hexa cho bit database file cha block
V d:
0000000F.0000.0002
Row u tin trong block 15 ca data file th hai.
7.3.10. Kiu MLSLABEL
Kiu MLSLABEL dng cha label dng nhphn m Oracle dng m bo hot ng ca bn thn hthng.
7.3.11. Chuyn i kiu
Chuyn i mc nh
Ni chung mt biu thc khng th gm cc gi tr thuc nhiu kiu khc nhau, tuy nhin Oracle cho phpchuyn 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 chuyngi tr sang kiu ca ct.
Khi s dng cc hm hoc cc ton t m cc tham s c kiu khng tng thch thOracle s t ng chuyn kiu.
Khi s dng ton t so snh m cc gi tr c cc kiu khc nhau, Oracle s t ngchuyn kiu.
V d 1:
SELECT ename FROM emp WHERE hiredate = '12-MAR-1993'
Oracle t ng chuyn chui '12-MAR-1993' sang kiu DATE trong php so snh
V d 2:
SELECT ename FROM emp WHERE ROWID = '00002514.0001.0001'
Trang 58
-
8/4/2019 Oracle PLSQL Chuan
60/104
Oracle c bn - SQL v PL/SQL
Oracle t ng chuyn chui '00002514.0001.0001' sang kiu ROWID trong php sosnh
Ngi s dngt 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)
7.4.RNG BUC D LIU TRONG TABLE
Cc dngconstraint gm:
NULL/NOTNULLUNIQUE
PRIMARYKEY
FOREIGNKEY (Referential Key)
CHECK
7.4.1. NULL/NOT NULL
L rng buc column trng hoc khng trng.
V d mnh rng buc:
CREATE TABLE DEPT (DEPTNO NUMBER(2)NOT NULL,DNAME CHAR(14),LOC CHAR(13),CONSTRAINT DEPT_PRIMARY_KEY PRIMARY KEY (DEPTNO));
7.4.2. UNIQUE
Ch ra rng buc duy nht, cc gi tr ca column ch trong mnh UNIQUE trong cc row
ca table phi c gi tr khc bit. Gi tr null l cho php nu UNIQUEda trn mt ct.
V d:
CREATE TABLE DEPT (
DEPTNO NUMBER(2),DNAME CHAR(14),LOC CHAR(13),CONSTRAINT UNQ_DEPT_LOC UNIQUE(DNAME, LOC));
7.4.3. PRIMARY KEY
Ch ra rng buc duy nht (ging UNIQUE), tuy nhin kho l dng kho UNIQUE cp caonht. Mt table ch c th c mt PRIMARY KEY. Cc gi tr trong PRIMARY KEY phi NOTNULL.
Trang 59
-
8/4/2019 Oracle PLSQL Chuan
61/104
Oracle c bn - SQL v PL/SQL
C php khi t CONSTRAINT mc TABLE[CONSTRAINT constraint_name] PRIMARY KEY (column,Column..)
C php khi t CONSTRAINT mc COLUMN[CONSTRAINT constraint_name] PRIMARY KEY
7.4.4. FOREIGN KEY ( Referential )Ch ra mi lin h rng buc tham chiu gia table ny vi table khc, hoc trong chnh 1 table. N ch rami lin h cha-con v ch rng bucgia FOREIGN KEYbng ny vi PRIMARY KEYhoc UNIQUEKey ca bng khc. V d quan h gia DEPT v EMPthng qua trng DEPTNO.
T kho ON DELETE CASCADEc h nh trong dng kho ny ch khi d liu cha b xo (trongbng DEPT) th d liu con cng t ng b xo theo (trong bng EMP).
7.4.5. CHECK
Rng buc kim tra gi tr.
V d:
CREATE TABLE EMP(EMPNO NUMBER NOT NULL CONSTRAINT PK_EMP PRIMARY KEY,ENAME VARCHAR2(10) CONSTRAINT NN_ENAME NOT NULLCONSTRAINT UPPER_ENAME CHECK (ENAME =
UPPER(ENAME)),JOB VARCHAR2(9),MGR NUMBER CONSTRAINT FK_MGR REFERENCES
SCOTT.EMP(EMPNO),HIREDATE DATE DEFAULT SYSDATE, SALNUMBER(10,2) CONSTRAINT CK_SAL
CHECK(SAL>500),COMM NUMBER(9,0) DEFAULT NULL,DEPTNO NUMBER(2) CONSTRAINT NN_DEPTNO NOT NULL
CONSTRAINT FK_DEPTNO REFERENCES SCOTT.DEPT(DEPTNO);
7.5.LNH DDL CAN THIP TI TABLE
7.5.1. Chnh sa cu trc table
Dng lnh ALTER TABLE chnh sa cu trc bng. C
php:
ALTER TABLE tablename [ADD/MODIFY/DROP options([column [column constraint) [ENABLE clause][DISABLE clause]
Trong :
ADD Thm column hay constraint.MODIFY Sa i kiu cc columnDROP B constraint.ENABLE/DISABLE Che khut hoc a vo s dng cc CONSTRAINT m
khng xa hn
Ch :
Trang 60
-
8/4/2019 Oracle PLSQL Chuan
62/104
Oracle c bn - SQL v PL/SQL
Kh dng mnh MODIFY khng th chuyn tnh cht ca COLUMN c ni dung lNULLchuyn 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 CONSTRAINTtr rng buc
NULL/NOT NULL. Mun sa CONSTRAINTcn xo chng sau ADD thm vo.
V d 1:
ALTER TABLE emp ADD (spouse_name CHAR(10);
V d 2:
ALTER TABLE emp MODIFY (ename CHAR(25);
V d 3:
ALTER TABLE emp DROP CONSTRAINT emp_mgr;ALTER TABLE DROP PRIMARY KEY;
V d 4:
ALTER TABLE dept DISABLE CONSTRAINT dept_prim;
7.5.2. Cc lnh DDL khc
Xa table
Dng lnh DROP TABLE xo bng.
C php:
DROP TABLE table_name [CASCADE CONSTRAINTS]
Trong :
CASCADE CONSTRAINTS xa tt c cc rng buc ton vn lin quann table b xa.
V d:
DROP TALE emp
Khi drop table th:
Xa tt cd liu
View v synonymlin quan vn cn nhng khng c gi tr Ccgiao dch cha gii quyt xong s c commit Ch ngi to ratable hay DBA mi c th xa table
7.5.3. Ch dn cho table
Dng lnh COMMENT ch thch.
V d:
Trang 61
-
8/4/2019 Oracle PLSQL Chuan
63/104
Oracle c bn - SQL v PL/SQL
COMMENT ON TABLE EMP IS THONG TIN NHAN VIEN;COMMENT ON COLUMN EMP.EMPNO IS MA SO NHAN VIEN;
7.5.4. Thay i tn object
Dng lnh RENAME thay i tn object.
C php:
RENAME old TO new
Trong :
old Tn cnew Tn mi
V d:
RENAME emp TO employee
7.5.5. Xa d liu ca table
Dng lnh TRUNCATE TABLE xa d liu ca table, xa tt c cc row trong table. C php:TRUNCATE TABLE table_name [REUSE STORAGE]
Trong :
REUSE STORAGE gi li khung cha, ch xa d liu
7.6.THNG TIN V TABLE TRONG T IN D LIU
Trung tm ca c s d liu Oracle l data dictionary. Data dictionary t ng c to ra khi c s d liuOracle c to. Oracle cp nht ln data dictionary bng cc lnh D DL (Data Define Language). Cc table
ca t in d liu c to ra bng lnh CREATE DATABASEv ch c to t userSYS. Cc view trongt 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 l nh
SELECT * FROM DICTIONARY;
Trang 62
-
8/4/2019 Oracle PLSQL Chuan
64/104
Oracle c bn - SQL v PL/SQL
Hin th cu ca USER_OBJECT
DESCRIBE USER_OBJECT;
Hin th tt c cc bng m user s hu:
SELECT OBJECT_NAMEFROM 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_TYPEFROM USER_OBJECTS;
7.7.BI TP1. 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 4P_DESC VARCHAR2 20P_START_DATE DATEP_END_DATE DATEBUDGET_AMOUNT NUMBER 7,2MAX_NO_STAFF NUMBER 2
2. To bng ASSIGNMENTSvi cc column c ch ra di y,ng thi ctPROJIDl foreign key ti bng PROJECT, ct EMPNOl foreign key ti bng EMP.
Column name Data Type Size.
PROJID NUMBER 4 NOT NULLEMPNO NUMBER 4 NOT NULLA_START_DATE DATEA_END_DATE DATEBILL_AMOUNT NUMBER 4,2ASSIGN_TYPE VARCHAR2 2
3. Thm column COMMENTS kiu LONG vo bng PROJECTS. Thm column HOURS kiuNUMBERvo bng ASSIGNMENTS.
4. S dng view USER_OBJECTShin th tt c cc i tng user s hu.
5. Thm rng buc duy nht (UNIQUE) cho 2 column PROJECT_ID v EMPNO ca bngASSIGNMENTS.
6. Xem cc thng tin v cc rng buc trong USER_CONSTRAINTS.
7. Xem trong USERhin ti c tt c bao nhiu bng.
Trang 63
-
8/4/2019 Oracle PLSQL Chuan
65/104
Oracle c bn - SQL v PL/SQL
Chng 8. CC LNH THAO TC D LIU
8.1.THAO TCD LIU TRONG TABLE
8.1.1. Thm mi dng d liu
chn mt row vo table dng lnh INSERT. C
php:
INSERT INTO tablename ([column, 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
Bt u t phin bn Oracle 9i, ta c th thm mi dng d liu v t gi tr mc nh thng qua t khoDEFALT
V d:
INSERT INTO EMP (EMPNO, ENAME, DEPTNO)
VALUES (8000,MIKE,DEFAULT);
Oracle 9i cn cho php thc hin lnh INSERTtrn ng thi nhiu table khc nhau, ch s dng mt culnh DML.
V d:
Lnh INSERT khng iu kin (UNCONDITIONAL)
INSERT ALL
INTO T1 (C1, C2, ...) VALUES (C1, C2, ...)
INTO T2 (C1, C2, ...) VALUES (C1, C2, ...)
SELECT C1, C2, ... FROM T9;
Lnh INSERT khng iu kin (CONDITIONAL)
INSERT [ALL|FIRST]
WHEN c1 = 1 THEN INTO T1 (C1, C2, ...) VALUES (C1, C2, ...)
WHEN c1 = 2 THEN INTO T2 (C1, C2, ...) VALUES (C1, C2, ...)
WHEN c2 = 3 THEN INTO T3 (C1, C2, ...) VALUES (C1, C2, ...)
SELECT C1, C2, ... FROM T9;
Trang 64
-
8/4/2019 Oracle PLSQL Chuan
66/104
Oracle c bn - SQL v PL/SQL
FIRST: insert cho cu lnh u tin c gi tr iu kin ng
ALL: insert cho mi cu lnh c gi tr iu kin l ng
8.1.2. Cp nht dng d liu
chnh sa d liu dng lnh UPDATE.
C php:
UPDATE table [alias]SET column [,column...] = [expr, subquery][WHERE condition]
V d 1:
UPDATE emp
SET job = 'SALEMAN', hiredate = sysdate, sal = sal * 1.1WHERE ename = 'SCOTT';
V d 2:
UPDATE empSET comm = (SELECT comm FROM commission C
WHERE C.empno = emp.empno)
WHERE empno IN (SELECT empno FROM commission);
V d 3:
UPDATE emp aSET deptno =
(SELECT deptno FROM deptWHERE 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 deptWHERE loc = 'DALLAS' OR loc = 'DETROIT');
Ta cng c th s dng mnh DEFAULT trong cu lnh cp nht d liu V d:
UPDATE EMP SET COMM = DEFAULT;
Ch thch:
- Cp nht cc nhn vin Dallas hoc Detroit- Thay DEPTNO ca cc nhn vin ny bng DEPTNO ca Boston - Thay lngmi nhn vin bng lng trung bnh ca b phn * 1.1 - Thay commission cami nhn vin bng commission trung bnh ca b
phn * 1.5
8.1.3. Lnh Merge
Lnh MERGE l mt c im rt hay ca Oracle 9i. N cn c gi l lnh UPSERT, tc l c kh nngva thc hin vic Update, va thc hin lnh Insert tu vo bn ghi ch c tn ti hay khng.
C php:
MERGE INTO T1
Trang 65
-
8/4/2019 Oracle PLSQL Chuan
67/104
Oracle c bn - SQL v PL/SQL
USING T2 ON