- Phân tích d li u: Oracle Discoverer, Oracle Express, Oracle Warehouse Builder .... - Oracle Application Server OAS - ng d ng đóng gói: Oracle Human Resource, Oracle Financial Applicati
Trang 1TS TR NăV NăD NGă(CH BIÊN)
BÀI GI NG:
CÔNG NGH ORACLE
(H c ph n: 03 tín ch )
Trang 3L IăM ă U
Hi n nay, h qu n tr c s d li u đ c s d ng ph bi n trên th gi i và t i
Vi t Nam là: Oracle, Microsoft SQL-Server và IBM-DB2 v.v Trong đó, Oracle
th ng đ c các doanh nghi p đang phát tri n và doanh nghi p l n s d ng, đ c bi t
là các ngân hàng và các t p đoàn tài chính, b o hi m, thu ,… n i mà ngoài t c đ x
lý thì yêu c u b o m t, an toàn d li u luôn đ c đ t lên hàng đ u
Oracle không ch có m t h qu n tr CSDL m nh m mà còn cung c p m t h
th ng ph n m m và các gi i pháp toàn di n cho phép gi i quy t h u h t các bài toán
c a doanh nghi p
Bài gi ng “Công ngh Oracle” là tài li u đ c biên so n đ ph c v cho vi c
gi ng d y, h c t p c a gi ng viên, sinh viên ngành Công ngh thông tin Tài li u cung
c p nh ng ki n th c c s v h qu n tr c s d li u Oracle và xây d ng ng d ng
v i các công c c a Oracle
Bài gi ng “Công ngh Oracle” đ c biên so n 03 tín ch theo đ c ng h c
ph n “Công ngh Oracle” do TS Tr n V n D ng làm ch biên và đ c trình bày trong
M c dù đã h t s c c g ng, song do biên so n l n đ u, bài gi ng không tránh
kh i nh ng thi u sót Kính mong đ ng nghi p và b n đ c đóng góp ý ki n đ bài gi ng
đ c hoàn thi n h n
Xin chân thành c m n /
Nhóm tác gi
Trang 4M ă U
GI IăTHI UăCHUNGăV ăCÔNGăNGH ăORACLE
Công ngh Oracle là t p h p các s n ph m ph n m m ph c v cho m c đích xây
d ng và qu n lý h th ng thông tin, các ng d ng giao ti p v i c s d li u
- Database Server (Server qu n lý c s d li u)
- Công c thao tác c s d li u: SQL*Plus
- Công c phát tri n ng d ng: Oracle Developer Suite (Form, Report, … ), Oracle JDeveloper,
- Phân tích d li u: Oracle Discoverer, Oracle Express, Oracle Warehouse Builder
- Oracle Application Server (OAS)
- ng d ng đóng gói: Oracle Human Resource, Oracle Financial Applications
- Oracle Email, Oracle Calendar, Oracle Web Conferencing
- N m 1999 Oracle gi i thi u Oracle8i (i:internet)
- N m 2001-2002: 2 phiên b n Oracle9i (Release 1&2)
- N m 2004-2005: 2 phiên b n Oracle10g (g:Grid) (Release 1&2)
- N m 2008: Phiên b n 11g (Release 1&2)
Trang 5- Có th th a mãn yêu c u khai thác đ ng th i c a nhi u ng i s d ng hay nhi u
ch ng trình ng d ng v i m c đích khác nhau
H qu n tr CSDL là gì?
H qu n tr c s d li u (database management system - DBMS) là m t h
th ng ph n m m nh m cung c p cho ng i s d ng m t môi tr ng thích h p, hi u
qu đ khai thác CSDL theo các khía c nh l u tr , s a đ i và truy v n thông tin M t
s h qu n tr CSDL th ng g p: MS Access, MS SQL Server20xx, MySQL, Oracle, DB2, LDAP…
H qu n tr CSDL Oracle (g i t t là Oracle) là m t trong nh ng h qu n tr c
s d li u quan h m nh m nh t th gi i c thi t k đ tri n khai cho m i môi
tr ng doanh nghi p Vi c cài đ t, qu n lý r t d dàng, cung c p nhi u công c giúp phát tri n các ng d ng m t cách hoàn thi n và nhanh chóng Oracle phù h p cho m i
lo i d li u, các ng d ng và các môi tr ng khác nhau nh windows và linux K t n i
ng d ng v i công ngh Web đ c tích h p trong Oracle Web Server
H n hai ph n ba trong s 500 t p đoàn công ty l n nh t th gi i (Fortune 500)
s d ng Oracle Vi t Nam h u h t các đ n v l n thu c các ngành ngân hàng, kho
b c, thu , b o hi m, b u đi n, hàng không, d u khí,… đ u s d ng h qu n tr CSDL Oracle
Các đ c đi m c a Oracle
- Tính an toàn d li u cao
- C ch quy n h n rõ ràng, n đ nh
- D cài đ t, d tri n khai, b o trì và nâng c p lên phiên b n m i
- Tích h p thêm PL/SQL, là m t ngôn ng l p trình th t c, thu n l i đ vi t các Trigger, StoreProcedure, Package
- Kh n ng x lý d li u r t l n, có th lên đ n hàng tr m terabyte (1 terabyte ~ 1,000 gigabyte ~ 1,000,000,000 kilobyte) mà v n đ m b o t c đ x lý d li u r t cao
- Kh n ng b o m t r t cao, Oracle đ t đ b o m t c p c2 theo tiêu chu n b o m t
c a b qu c phòng m và công ngh Oracle v n đ c hình thành t yêu c u đ t hàng
c a các c quan an ninh FBI và CIA
- T ng thích v i nhi u platform (Unix, Linux, Solaris, Windows v.v…)
M t vài đi m so sánh Oracle v i SQL Server
B ng 1.M t vài so sánh Oracle và SQL Server
PA-Ch y đ c trên h u h t các
ki n trúc ph n c ng
Trang 6Operating system Windows Multi-platform (Windows,
linux,unix, ) Programming
Trên m i máy có nhi u Instances, s l ng ph thu c vào t ng OS
Login Name/ DB
username
M i Login name có th
"map" t i nhi u DB Username trong các Database, LoginName và
DB Name không nh t thi t cùng tên vd: LoginName là
SA đ c map t i DB Username tên là DBO trong
t t c các Database
Không có s phân bi t LoginName/DB Name Khi t o
1 user, thì đó là v a là LoginName v a là Db Username
Database/
Schema (*)
M i Instance có nhi u Database, và m i Database
có nhi u schema Có th phân quy n cho DB Username trên schema
M i Instance xem nh ch có 1 Database !!! Trong Database
có nhi u DB Username, t ng
ng m i DB Username có 1 và
ch 1 schema cùng tên v i user Vì v y, trong Oracle không có khái ni m phân quy n trên schema (ch có phân quy n cho t ng Objects trên schema đó)
Giao di n
qu n tr CSDL m c
đinh
D s d ng (SQL Server Managerment Studio)
N ng n , khó s d ng OEM (Oracle enterprise manager)
Command
line
Giao di n dòng l nh dài dòng và ph c t p, khó dùng
Giao di n dòng l nh d s
d ng, đa s là Create/Alter/Drop Nh vi c phân quy n ch c n
Grant/revoke
(*) Schema: User có th làm vi c trong ph m vi cho phép c a mình mà Oracle
g i là "khung c nh" (Schema) c a user, hay còn g i là l c đ CSDL c a user M i
l c đ CSDL là t p h p các đ i t ng nh là table, view, trigger, function, procedure,… Ng i dùng đ c c p quy n trên l c đ nào thì ch có th tác đ ng lên các đ i t ng trong l c đ đó
Trong Oracle m i database có nhi u schema, t ng ng v i m i schema s có
m t và ch m t user trùng tên v i schema đó
Trang 7VD: Trong Oracle m c đ nh có 2 user là SYSTEM và SCOTT, t ng ng là 2 schema cùng tên SYSTEM là user có quy n cao nh t trong h th ng, ng i dùng khi
đ ng nh p vào SYSTEM có th tác đ ng đ n b t kì đ i t ng trên b t k schema nào Còn khi đ ng nh p vào SCOTT thì ch có th tác đ ng trên schema SCOTT
Cài đ t Oracle 10G trên windows
B c 1 Thay đ i thu c tính file setup.exe nh hình d i bao g m:
- Run this program in compatibility mode for: Windows XP
- Run this program as an administrator
Hình 1. Thay đ i thu c tính file setup
Trang 8B c 2 M file cài đ t setup.exe
Hình 2.Giao di n cài đ t đ u tiên
Confirm Password: Nh p l i m t kh u đã nh p trong m c Database Password
B c 3 Nh p m t kh u cho database (Ghi nh m t kh u này!) Sau đó
b m next
M t kh u khuy n ngh : abc123
Trang 9Hình 3.Giao di n nh p m t kh u
B c 4 B m next liên t c cho đ n khi hi n lên hình d i thì b m Install
Hình 4.Các thành ph n s cài đ t
Trang 10Quá trình t đ ng cài đ t b t đ u Th i gian ch kho ng 15-20 phút
Hình 5.Quá trình cài đ t b t đ u
M t s l uăỦăquanătr ng
Ki m tra service m i khi làm vi c v i Oracle
C n nh : M i khi kh i đ ng máy, đ làm vi c đ c v i CSDL Oracle, ta ti n
hành các công vi c sau:
a Ki m tra các services c a Oracle xem đã tr ng thái started ch a N u
ch a thì start lên xem các services trong window, vào start, gõ services
Hình 6.Các service c a Oracle
Trang 11L i khuyên: nên thi t l p các service c a Oracle ch đ kh i đ ng là Manual
thay vì Automatic đ gi m th i gian kh i đ ng windows Khi c n làm vi c v i Oracle,
ta ti n hành kh i đ ng l n l t 2 service là OraclServiceORCL và OracleOraDb10g_home1TNSListener
Ch kho ng 1 phút đ các ti n trình kh i đ ng hoàn t t
b ng nh p vào sqlplus v i quy n sysdba:
+ Start\cmd (Run as administrator)
+ Gõ l nh: sqlplus sys/abc123 as sysdba (abc123 là m t kh u database lúc cài đ t)
o N u tr ng thái là Connected to: … thì đã có th làm vi c đ c v i CSDL
Trang 12Hình 9.Kh i đ ng instance
T t service không c n thi t
t ng t c cho h th ng, ta chuy n Startup Type c a service có tên b t đ u là OracleDBConsole sang tr ng thái Disabled
PL/SQL Developer
Khác v i SQL Server ho c MySQL có gói download mà khi cài đ t xong nó có
s n công c tr c quan đ làm vi c Còn v i Oracle, m c đ nh đ làm vi c v i CSDL
ta s d ng Oracle Enterprise Manager (OEM) thông qua trình duy t web, nh ng công
c này khá n ng n và c ng k nh khi ch y trên các máy tính đ bàn ho c xách tay Vì
v y ta s d ng công c có tên PL/SQL Developer đ làm vi c v i Oracle
Hình 10. Ảiao di n đ ng nh p khi kh i đ ng ch ng trình
Thông tin đ ng nh p bao g m:
Username: tên schema/tên user (tên ng i dùng)
Password: m t kh u t ng ng
Database: tên c s d li u
Connect as: lo i quy n k t n i đ n database {Normal, SYSDBA, SYSOPER}
Trang 13Chú ý: Ph i ch y PL/SQL Developer v i quy n admin, n u không khi đ ng
nh p s x y ra l i nh 11
Hình 11. L i khi đ ng nh p
Hình 12. Ảiao di n làm vi c khi đ ng nh p thành công
Khi đ ng nh p thành công, trên thanh tiêu đ c a ng d ng s hi n tên user và tên database hi n đang đ c s d ng Ví d Hình 12 là: system@orcl t c là đã đ ng
nh p vào user system c a c s d li u có tên orcl
Phiên làm vi c
V i m i m t c a s làm vi c c a PL/SQL Developer s ch làm vi c
v i m t schema (hay còn g i là m t user) c a m t database trong m t th i
đi m
M t phiên làm vi c trong PL/SQL Developer s b t đ u khi m t user
đ ng nh p thành công và k t thúc khi m t trong các s ki n sau x y ra:
- M t user khác đ ng nh p
Trang 14T o m t c a s SQL Window đ vi t và th c thi các câu l nh SQL
VD: Truy v n t t c thông tin trong b ng emp c a user scott
Select * from scott.emp;
Hình 14. Ví d v th c thi câu l nh SQL
Trang 15 Các l iăth ng g păkhiăđ ngănh p
* ORA-12541: TNS:no listener
Nguyên nhân: service OracleOraDb10g_home1TNSListener ch a đ c start
Kh c ph c: start service này lên Ch kho ng 1 phút
* ORA-12514: TNS:listener does not currently know of service requested in
connect descriptor
Nguyên nhân: listener không tìm th y service c a database ho c instance ch a
đ c startup
Kh c ph c: start service OracleServiceORCL, ch kho ng 1 phút đ kh i đ ng
h t các ti n trình N u v n không đ c thì đ ng nh p vào sqlplus v i quy n sysdba và startup database
Bài t p th c hành
Bài 1 Làm vi c v i CSDL thông qua PL/SQL Developer
a ng nh p vào user system
b Truy v n tên các b ng đ c t o trong user scott b ng câu l nh:
HD: select table_name from dba_tables where owner='SCOTT';
c Truy v n thông tin trong b ng DEPT và EMP c a user scott
HD: select * from scott.dept; select * from scott.emp;
d Hi n th tên các nhân viên trong phòng ban có mã là 30
HD: select ename from scott.emp where deptno=30;
e ng nh p vào user scott v i m t kh u là 123456 và đ a ra nh n xét
f ng nh p l i vào user system và ti n hành đ i m t kh u c a scott thành tiger
và m khóa nó
HD: alteruser scott identifiedby tiger accountunlock;
g ng nh p l i vào user scott v i m t kh u đã thay đ i câu f và th c hi n các truy v n câu c,d
h T o m t c a s Diagram Window và kéo 2 b ng EMP và DEPT vào c a s Diagram đ xem mô hình k t n i gi a các 2 b ng
Trang 17Ch ngă1 NGÔN NG PL/SQL
1.1 M T S KHÁI NI MăC ăB N
1.1.1 Các khái ni m trong c s d li u
- Table là c u trúc l u tr c b n nh t trong CSDL quan h (RDBMS), nó bao
g m 1 ho c nhi u column và 0 ho c nhi u row
- Column hi n th m t lo i d li u trong b ng, ví d tên phòng ban trong b ng phòng ban Ng i ta th hi n nó thông qua tên column và gi s li u d i các ki u và kích c nh t đ nh
- Row là t h p nh ng giá tr c a Column trong b ng M t row còn có th đ c
g i là 1 b n ghi (record)
- Field là giao c a column và row Field chính là n i ch a d li u N u không có
d li u trong field ng i ta nói field có giá tr là null
- Primary Key là m t column ho c m t t p các column xác đ nh tính duy nh t c a các row trong b ng Ví d mã phòng ban Primary Key nh t thi t ph i có s li u
- Foreign Key là m t column ho c m t t p các column tham chi u m t b ng khác
ho c t i chính b ng đó Foreign Key xác đ nh m i quan h gi a các b ng
- Constraint là các ràng bu c d li u, ví d Foreign Key, Primary Key
Ví d :
Hình 15.Minh h a các khái ni m trong CSDL
M t s đ i t ng khác trong CSDL:
- View là c u trúc logic hi n th d li u t m t ho c nhi u b ng
- Sequence dùng đ sinh t đ ng các giá tr s t ng d n, th ng dùng cho vi c khóa chính t đ ng t ng Index t ng tính th c thi c a câu truy v n
Trang 18COMMIT,
ROLLBACK,
SAVEPOINT
Qu n lý vi c thay đ i d li u b ng các l nh DML
GRANT, REVOKE 2 l nh này dùng đ gán ho c hu các quy n truy nh p vào
CSDL Oracle và các c u trúc b n trong nó Nh ng l nh này
đ c g i là các l nh đi u khi n d li u DCL (Data Control Language)
1.1.3 Truy v năd ăli uăc ăb n
- S ăđ ăquanăh ăc ăs ăd ăli uăth căhƠnhă(M căđ nh có s n trong user scott khi
t oăc ăs d li u)
Hình 16. S đ quan h c s d li u th c hành
Trang 19EMP
SELECT Hi n th n i dung c a m t hay nhi u c t
DISTINCT Phân bi t n i dung gi a các dòng d li u tr v
* L y t t các các c t trong b ng
COLUMN Tên c t d li u c n tr v
Trang 20ALIAS ph n tiêu đ c a c t d li u tr v
FROM TABLE Tên b ng ch a d li u truy v n
+ Các thành ph n khác có th đ a vào m nh đ SELECT trong câu l nh truy v n
VD: SELECT ename, sal *12, comm FROM scott.emp;
Tiêuăđ c a c t (column alias):
Trong m nh đ SELECT, column alias là ph n nhãn hi n th c a column khi l y
s li u ra Trong column alias không đ c có d u cách và vi t cách sau tên column
m t d u cách Column alias đ c ch p nh n có d u cách khi đ c đ t trong d u nháy kép (“ ”)
VD: (ANUAL chính là column alias)
SELECT ename, SAL*12 ANUAL, comm FROM scott.emp;
Ghép ti p các c t d li u:
Toán t ghép ti p chu i (||) cho phép ghép ti p d li u trong các c t khác nhau
c a cùng m t dòng d li u v i nhau thành m t chu i
Ta có th có nhi u toán t ghép chu i trong cùng m t column alias
VD: select empno||ename employee from scott.emp;
Ghép ti p chu i ký t
Trong m nh đ SELECT, ta có th th c hi n ghép ti p b t k ký t nào, bi u
th c hay s nào mà không ph i là column ho c column alias
VD: select empno || ename || 'work in department' || deptno "employee detail" from scott.emp;
Hàm:
Trong m nh đ select có th ch a các hàm có s n ho c do ng i dùng t o ra VD: select sysdate from dual; Hi n th ngày gi h th ng
Trang 21Chú ý: DUAL là b ng gi (dummy table) trong Oracle, b ng này ch có m t
tr ng và đ c s d ng khi câu truy v n không c n thi t tham chi u đ n m t b ng
Tên column, h ng s ho c danh sách các giá tr
VD: select deptno, job, ename, sal from scott.emp where sal between 1000 and 2000;
1.1.3.3 S p x p d li u tr v - M nh đ ORDER BY
Cú pháp:
SELECT [DISTINCT] {*, COLUMN [ALIAS], } FROM TABLE [WHERE
CONDITION] [ORDER BY EXPR/POSITION [DESC/ASC]];
M nh đ ORDER BY dùng đ s p x p s li u đ c hi n th và ph i đ t v trí sau cùng c a câu l nh truy v n
VD: select ename, job, sal*12, deptno from scott.emp orderby ename;
M nh đ ORDER BY m c đ nh s p x p theo th t t ng d n ASC[ENDING]:
s th p tr c, ngày nh tr c , ký t theo b ng ch cái
M nh đ Order còn có th s p x p nhi u column Các column c n s p x p đ c
vi t th t sau m nh đ ORDER BY và cách b i d u ph y (,) Column nào g n m nh
đ ORDER BY h n có m c đ u tiên khi s p x p cao h n Ch đ nh cách th c s p
x p ASC/DESC đ c vi t sau column cách b i m t d u cách
VD: select deptno, job, ename, sal from scott.emp orderby deptno, sal desc;
1.1.3.4 Nhóm d li u tr v - M nh đ GROUP BY [HAVING ]
Cú pháp:
SELECT [DISTINCT] {*, COLUMN [ALIAS], } FROM TABLE [WHERE
CONDITION] [GROUP BY EXPR] [HAVING CONDITION] [ORDER BY
EXPR/POSITION [DESC/ASC]];
M nh đ GROUP BY s nhóm các dòng d li u có cùng giá tr c a expr Ví d GROUP BY JOB ngh a là s nhóm các ngh gi ng nhau Th ng dùng trong các bài toán th ng kê nh tính t ng, tìm l n nh t, nh nh t, trung bình… M nh đ GROUP
Trang 22BY ph i theo sau các đi u ki n trong m nh đ WHERE và ph i đ ng tr c m nh đ ORDER BY n u đ c s d ng
VD: Hi n th l ng l n nh t c a t ng ch c v
select job, max(sal) from scott.emp groupby job;
M nh đ HAVING là đ t đi u ki n c a nhóm d li u Có th đ t ngay tr c
ho c ngay sau m nh đ GROUP BY M nh đ này khác m nh đ WHERE ch m nh
đ WHERE đ t đi u ki n cho toàn b câu l nh SELECT
VD: select job, max(sal) from scott.emp groupby job having
max(sal)>=3000; Hi n th l ng l n nh t t 3000 tr lên c a t ng ch c v
VD: Li t kê các nhân viên có dname=RESEARCH
Cách 1: select emp.*, dname from scott.emp,scott.dept where emp.deptno = dept.deptno and dname='RESEARCH';
Cách 2: select emp.*, dname from scott.emp inner join scott.dept on
emp.deptno=dept.deptno where dname='RESEARCH'; Có th b t khóa inner
K t n i trái(ph i) OUTER JOIN (LEFT ho c RIGHT):
N u b ng A LEFT OUTER JOIN v i b ng B thì k t qu g m các b n ghi có trong b ng A, v i các b n ghi không có m t trong b ng B thì các c t t B đ c đi n NULL Các b n ghi ch có trong B mà không có trong A s không đ c tr v VD: select e.ename, d.deptno, d.dname from scott.dept d leftjoin scott.emp e on
d.deptno = e.deptno;
Liên k t c a b ng v i chính nó (t thân)
Có th liên k t b ng v i chính nó b ng cách đ t alias
VD: Hi n th thông tin bao g m tên nhân viên, l ng nhân viên, tên ng i qu n lý
c a nhân viên đó, l ng ng i qu n lý đó v i đi u ki n l ng c a nhân viên l n h n
l ng ng i qu n lý nhân viên đó
Select e.ename ten_nhan_vien, e.sal luong, m.ename ten_quan_ly, m.sal
luong_quan_ly from scott.emp e, scott.emp m where e.mgr = m.empno and e.sal >
m.sal;
Hình 17. K t qu tr v câu l nh truy v n
Trang 231.1.4.2 L nh truy v n l ng nhau
Câu l nh SELECT l ng nhau
+ Trong m nh đ WHERE
VD: Tìm nh ng nhân viên làm cùng ngh v i BLAKE
Select ename, job from scott.emp where job = (select job from scott.emp where
ename = 'BLAKE');
+ Trong m nh đ HAVING
VD: Tìm nh ng phòng có m c l ng trung bình l n h n phòng 30
Select dept.deptno, dname, avg(sal) from scott.emp, scott.dept where
emp.deptno = dept.deptno groupby dept.deptno, dname havingavg(sal) > (select
avg(sal) from scott.emp where deptno = 30);
Toán t SOME/ANY/ALL/NOT IN/EXITS
B ng 4.Mô t các toán t c b n
NOT IN / IN Không thu c / Thu c
ANY và SOME So sánh m t giá tr v i m i giá tr trong k t qu tr v c a câu truy
v n con Tr v đúng khi phép so sánh v i b t k giá tr nào là đúng
ALL So sánh m t giá tr v i m i giá tr trong danh sách hay trong k t
qu tr v c a câu h i con Tr v đúng khi phép so sánh v i t t c các giá tr đ u đúng
EXISTS Tr v TRUE n u có t n t i
VD: Hi n th các nhân viên có l ng l n h n các nhân viên phòng 30
Select * from scott.emp where sal >= all (selectdistinct sal from scott.emp
where deptno = 30) orderby sal desc;
1.1.4.3 Các hàm x lý d li u
Các hàm x lý chu i, ký t
+ CHR(number_code) : tr v ký t theo mã ký t , trong đó: number_code là
mã ký t trong b ng mã ASCII
VD: select CHR(116) from dual; => ‘t’
+ LENGTH(<chu i>): tr v đ dài chu i, n u chu i là tr ng ho c là NULL,
thì hàm s tr v NULL
VD: select length('ORACLE') from dual; => 6
Trang 24+ LOWER( string1 ): chuy n đ i t t c các ký t trong chu i string1 thành ký
t th ng
VD: selectLOWER('ORACLE') from dual; => oracle
+ UPPER(string1): ng c l i c a LOWER
+ INSTR(<chu i a>,<chu i con b>,<v trí x>[,<i>]): Tr v v trí xu t hi n
l n th i c a chu i con b trong chu i a, b t đ u tìm t v trí x N u x < 0 thì tìm t
ph i sang trái
VD: SELECT INSTR('CORPORATE FLOOR', 'OR', , ) FROM DUAL; (=>14)
+ SUBSTR(<chu i a>,<v trí b t đ u x> [s ký t y,]): L y y ký t b t đ u t
v trí x c a chu i a N u x < 0 thì tìm t ph i sang trái N u không có y s l y đ n
+ LTRIM (<chu i a>,<chu i b>) (hay RTRIM, TRIM): C t kh i chu i a t
bên trái (hay t bên ph i, hay c hai bên) nh ng ky t có trong chu i b
VD: SELECT LTRIM('xyxXxyLAST WORD','xy') FROM DUAL;
+ MOD(a,b): L y ph n d c a a chia cho b
VD: SELECTMOD(11,4) "Modulus" FROM DUAL;
Trang 25+ EXTRACT(YEAR | MONTH | DAY FROM <ngày> ): Tr v thành ph n, ngày, tháng, ho c n m c a m t d li u ki u date
VD: SELECT EXTRACT(YEARFROMDATE'1998-03-07') FROM DUAL; (=>1998)
+ ADD_MONTHS(<ngày x>,<s tháng n>): Tr v ngày m i sau khi c ng n
tháng vào ngày x
VD: SELECT add_months(sysdate, ) FROM DUAL;
+ MONTHS_BETWEEN(<ngày 1>,<ngày 2>): S tháng gi a 2 ngày
+ SYSDATE: Tr v ngày tháng hi n t i
Các hàm chuy n đ i ki u:
+ TO_NUMBER (<chu i s >):Chuy n ký t có n i dung s sang s
+ TO_CHAR(<value>[, format_mask]): chuy n đ i m t giá tr s ho c ngày tháng sang chu i Trong đó, value là giá tr c n chuy n, format_mask là đ nh d ng s
select TO_CHAR(sysdate, 'yyyy/mm/dd') from dual;
+ TO_DATE( <value> [, format_mask]): chuy n đ i m t giá tr s ho c ngày
SELECT To_date ('30/4/2016', 'dd/MM/yyyy')-to_date('1/1/2016',
'dd/MM/yyyy') from dual;
K t qu : 120
Select extract(dayfromsysdate) from dual;
K t qu : 7
Trang 26MONTH Tên đ y đ c a tháng theo ti ng anh, đ dài 9
MON Tháng v i 3 ký t viên t t (JAN, FEB )
CREATE TABLE TABLE_NAME (COLUMN DATATYPE [DEFAULT
EXPR] [COLUMN_CONSTRAINT], , [TABLE_CONSTRAINT])
[TABLESPACE TABLESPACE_NAME] [AS SUBQUERY]
Trong đó:
COLUMN DATATYPE Tên column trong table Ki u d li u c a
column DEFAULT EXPR Giá tr m c đ nh c a column trong tru ng
h p NULL là expr COLUMN_CONSTRAINT Ràng bu c c a b n thân column, m t c t có
th có nhi u ràng bu c, m i ràng bu c c a
m t c t phân cách nhau b i d u cách
TABLE_CONSTRAINT ràng bu c c a toàn b ng, m i ràng bu c cách
nhau b i d u ph y (,) TABLESPACE
TABLESPACE_NAME
TABLESAPCE l u tr b ng đ c t o
AS SUBQUERY t o b ng có c u trúc gi ng m nh đ truy v n Các ví d t o b ng d i đây đ c th c hi n trong schema scott
Trang 27VD1:
createtable empdemo(empno numbernotnullconstraint pk_empdeno primarykey,ename varchar2(10) constraint nn_ename notnullconstraint upper_ename check(ename = upper(ename)),job varchar2(9),
hiredate datedefaultsysdate,
sal number(10,2) constraint ck_sal check(sal>500),
deptno number(2) constraint nn_deptno notnullconstraint fk_deptno2
references dept(deptno));
VD2: createtable dept10 as select empno, ename, job, sal from emp where deptno = 10;
1.1.5.2 M t s quy t c khi t o table
a Các quy t c đ t tên object
(1) Tên dài t 1 đ n 30 ký t , ngo i tr tên CSDL không quá 8 ký t và tên liên
k t có th dài đ n 128 ký t
(2) Tên không ch a d u nháy (")
(3) Không phân bi t ch hoa ch th ng
(4) Tên ph i b t đ u b ng ký t ch trong b ký t c a CSDL
(5) Tên ch có th ch a ký t s trong t p ký t c a CSDL Có th dùng các ký
t _, $, # ORACLE không khuy n khích dùng các ký t $ và #
(6) Tên không đ c trùng v i các t đã dùng b i ORACLE
(7) Tên không đ c cách kho ng tr ng
(8) Tên có th đ t trong c p d u nháy kép, khi đó tên có th bao g m các ký t
b t k , có th bao g m kho ng tr ng, có th dùng các t khóa c a ORACLE, phân bi t ch hoa ch th ng
(9) Tên ph i duy nh t trong "không gian tên" nh t đ nh Các object thu c cùng không gian tên ph i có tên khác nhau
b Quy t c khi tham chi u đ n Object
S đ chung khi tham chi u các object ho c thành ph n c a các object:
Schema.Object.Part.@dblink
Trong đó:
object: Tên object
schema: Schema ch a object
part: Thành ph n c a object
dblink: Tên CSDL ch a object
Trang 28Tham chi u đ n các object không thu c quy n s h u:
tham chi u đ n các object không thu c schema hi n th i, ph i ch ra tên
c a schema ch a object mu n truy c p: schema.object
Ví d : xóa table EMP trong schema SCOTT:
DROP TABLE scott.emp
Tham chi u các object t xa
truy c p đ n m t CSDL xa, sau tên object ph i ch ra tên liên k t CSDL (database link) c a CSDL ch a object mu n truy c p Database link là m t schema object, Oracle dùng đ thâm nh p và truy xu t CSDL t xa
1.1.5.3 Các ki u d li u c b n
CHAR: ki u CHAR dùng đ khai báo m t chu i có chi u dài c đ nh, khi khai
báo bi n ho c c t ki u CHAR v i chi u dài ch đ nh thì t t c các m c tin c a bi n hay
c t này đ u có cùng chi u dài đ c ch đ nh Các m c tin ng n h n Oracle s t đ ng thêm vào các kho ng tr ng cho đ chi u dài Oracle không cho phép gán m c tin dài
h n chi u dài ch đ nh đ i v i ki u CHAR Chi u dài t i đa cho phép c a ki u CHAR
là 255 byte
VARCHAR2: ki u VARCHAR2 dùng đ khai báo chu i ký t v i chi u dài
thay đ i Khi khai báo m t bi n ho c c t ki u VARCHAR2 ph i ch ra chi u dài t i
đa, các m c tin ch a trong bi n hay c t ki u VARCHAR2 có chi u dài th c s là chi u dài c a m c tin Oracle không cho phép gán m c tin dài h n chi u dài t i đa ch đ nh
đ i v i ki u VARCHAR2 Chi u dài t i đa ki u VARCHAR2 là 2000 byte
NUMBER: ki u s c a ORACLE dùng đ ch a các m c tin d ng s d ng,
s âm, s v i d u ch m đ ng
NUMBER(p, s)
Trong đó:
p: s ch s tr c d u ch m th p phân (precision), p t 1 đ n 38 ch s
s: s các ch s tính t d u ch m th p phân v bên ph i (scale)
NUMBER(p): s có d u ch m th p phân c đ nh v i precision b ng p và scale
b ng 0
NUMBER: s v i d u ch m đ ng v i precision b ng 38 Nh r ng scale không đ c áp d ng cho s v i d u ch m đ ng
DATE: Dùng đ ch a d li u ngày và th i gian M c dù ki u ngày và th i gian
có th đ c ch a trong ki u CHAR và NUMBER
V i giá tr ki u DATE, nh ng thông tin đ c l u tr g m th k , n m, tháng, ngày, gi , phút, giây Oracle không cho phép gán giá tr ki u ngày tr c ti p, đ gán giá
tr ki u ngày, b n ph i dùng TO_DATE đ chuy n giá tr ki u chu i ký t ho c ki u
s N u gán m t giá tr ki u ngày mà không ch th i gian thì th i gian m c đ nh là 12
Trang 29gi đêm N u gán giá tr ki u ngày mà không ch ra ngày, thì ngày m c đ nh là ngày
đ u c a tháng Hàm SYSDATE cho bi t ngày và th i gian h th ng
Ch ra ràng bu c duy nh t, các giá tr c a column ch trong m nh đ
UNIQUE trong các row c a table ph i có giá tr khác bi t Giá tr null là cho phép nêu UNIQUE d a trên m t c t
Ví d : create table dept ( deptno number(2), dname char(14), loc char(13),
constraint unq_dept_loc unique(dname, loc));
c PRIMARY KEY
Ch ra ràng bu c duy nh t (gi ng UNIQUE), tuy nhiên khoá là d ng khoá UNIQUE c p cao nh t M t table ch có th có m t PRIMARY KEY Các giá tr trong PRIMARY KEY ph i NOT NULL
Cú pháp khi đ t CONSTRAINT m c TABLE:
[CONSTRAINT constraint_name] PRIMARY KEY (column,
column )
Cú pháp khi đ t CONSTRAINT m c COLUMN:
Trang 30[CONSTRAINT constraint_name] PRIMARY KEY
d FOREIGN KEY
Ch ra m i liên h ràng bu c tham chi u gi a table này v i table khác, ho c trong chính 1 table Nó ch ra m i liên h cha-con và ch ràng bu c gi a FOREIGN KEY b ng này v i PRIMARY KEY ho c UNIQUE Key c a b ng khác Ví d quan
h gi a DEPT và EMP thông qua tr ng DEPTNO
T khoá ON DELETE CASCADE đ c ch đ nh trong d ng khoá này đ ch khi d li u cha b xoá (trong b ng DEPT) thì d li u con c ng t đ ng b xoá theo (trong b ng EMP)
e CHECK
Ràng bu c ki m tra giá tr
Ví d : createtable emp_test (empno numberprimarykey, ename varchar2(10)
constraint nn_ename constraint upper_ename check (ename = upper(ename)),
hiredate datedefaultsysdate,sal number(10,2) constraint ck_sal check (sal> 500 );
1.1.5.5 Ch nh s a c u trúc table
Cú pháp:
ALTER TABLE tablename [ADD/MODIFY/DROP options ([column [column
constraint) [ENABLE clause] [DISABLE clause]
- Khí dùng m nh đ MODIFY không th chuy n tính ch t c a COLUMN có n i dung là NULL chuy n thành NOT NULL;
- Không th đ a thêm m t c t NOT NULL n u table đã có s li u Ph i thêm c t NULL, đi n đ y s li u, sau đó chuy n thành NOT NULL
- Không th chuy n đ i ki u khác nhau n u column đã ch a s li u
- Không th dùng m nh đ MODIFY đ đ nh ngh a các CONSTRAINT tr ràng bu c NULL/NOT NULL Mu n s a CONSTRAINT c n xoá chúng sau đó ADD thêm vào
Ví d 1: Thêm m t column có tên là short_name vào b ng emp:
altertable emp add short_name char(10);
Ví d 2: Ch nh s a ki u d li u c a c t short_name t char(10) sang nvarchar2(25) altertable emp modify short_name nvarchar2(25);
Trang 31Ví d 3: Thêm 1 ràng bu c unique: altertable emp addconstraint unq_name
Cú pháp: DROP TABLE table_name [CASCADE CONSTRAINTS]
Trong đó: CASCADE CONSTRAINTS xóa t t c các ràng bu c toàn v n liên
quan đ n table b xóa
Khi drop table thì:
- Xóa t t c d li u
- View và synonymliên quan v n còn nh ng không có giá tr
- Các giao d ch ch a gi i quy t xong s đ c commit
- Ch ng i t o ra table hay DBA m i có th xóa table
Chú thích cho table
Dùng l nh COMMENT đ chú thích
Ví d : COMMENT ON TABLE EMP IS ‘ THONG TIN NHAN VIEN’; COMMENT ON COLUMN EMP.EMPNO IS ‘ MA SO NHAN VIEN’;
Thay đ i tên object
Dùng l nh RENAME đ thay đ i tên object
Cú pháp: RENAME old TO new
Trong đó: old Tên c new Tên m i
Ví d : RENAME emp TO employee
và các l nh giao tác
Trang 32- PL/SQL cho phép s d ng t t c l nh thao tác d li u g m INSERT, DELETE, UPDATE và SELECT, COMMIT, ROLLBACK, SAVEPOINT, c u trúc đi u khi n
nh vòng l p (for, while, loop), r nhánh (if),…mà v i SQL chúng ta không làm đ c
- PL/SQL h tr c l p trình h ng th t c và h ng đ i t ng
- M c tiêu chính c a PL/SQL là đ :
+ T ng thêm s c m nh c a ngôn ng SQL,
+ X lý k t qu c a câu l nh truy v n trên t ng dòng (dùng cursor),
+ Phát tri n các ch ng trình ng d ng trên CSDL d ng module,
+ Tái s d ng nh ng đo n code (dùng procedure),
+ Gi m chi phí trong vi c b o trì và thay đ i ng d ng
1.1.6.2 C u trúc PL/SQL
Ngôn ng PL/SQL t ch c các l nh theo t ng kh i l nh M t kh i l nh PL/SQL
c ng có th có các kh i l nh con khác trong nó
C u trúc đ y đ c a m t kh i l nh PL/SQL bao g m:
DECLARE /* Ph n khai báo - Không b t bu c */
Khai báo các bi n s d ng trong ph n thân
Trang 34dbms_output.put_line('Outer Variable num2: ' || num2);
dbms_output.put_line('Inner Variable num1: ' || num1);
dbms_output.put_line('Inner Variable num2: ' || num2);
END;
END;
=> K t qu :
Outer Variable num1: 95
Outer Variable num2: 85
Inner Variable num1: 195
Inner Variable num2: 185
Gán giá tr tr v c a câu l nh truy v n cho các bi n:
S d ng m nh đ SELECT INTO c a SQL đ gán giá tr cho các bi n V i
m i tr ng giá tr tr v trong SELECT ph i có m t bi n cùng ki u d li u v i
tr ng đó trong INTO
VD:
DECLARE
v_empno integer := 7788;
v_ename emp.ename%type;/*Khai báo bi n v_ename có ki u d li u gi ng
c a c t ename trong b ng emp.*/
v_hiredate emp.hiredate%type;
v_sal emp.sal%type;
BEGIN
SELECT ename,hiredate,sal INTO v_ename, v_hiredate, v_sal
FROM emp WHERE empno = v_empno;
dbms_output.put_line
('Employer ' ||v_ename || ' - Hiredate: ' || v_hiredate || ' - Sal: ' || v_sal);
Trang 35END;
K t qu : Employer SCOTT - Hiredate: 19-APR-87 - Sal: 3000
uătiênăc a toán t : ** (phép l y th a), NOT, *, /, +, -, || (phép n i
chu i), =, <>, <=, >=, IS NULL, LIKE, BETWEEN, IN, AND, OR
Trang 361.1.6.4 Các c u trúc đi u khi n trong PL/SQL
Hình 18. S đ t ng quát các c u tŕc đi u khi n
Trang 37DBMS_OUTPUT.PUT_LINE('condition true'); END IF;
DBMS_OUTPUT.PUT_LINE(NO || ' IS ODD'); END IF;
Trang 38Ví d :
Trang 39đ c s th c hi n và b qua các tr ng h p bên d i, khi t t c các m nh đ WHEN
bi u th c đi u ki n đ u sai thì đo n l nh trong m nh đ ELSE s đ c th c hi n
Ví d :
DECLARE
a number := 3;
Trang 40́ ngh a: o n l nh Statements s đ c th c hi n l p đi l p l i cho đ n khi
đi u ki n thoát condition là đúng thì thoát kh i vòng l p
EXIT WHEN đ c dùng đ ch đ nh đi u ki n thoát kh i vòng l p cho t t c các