Oracle PLSQL Chuan

download Oracle PLSQL Chuan

of 104

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