7.3.Các Ki ud li uc ả 7.3.1 Ki u CHAR ể

Một phần của tài liệu Oracle cơ bản - SQL và PL/SQL pptx (Trang 58 - 63)

- mr ng nh nh t; ấ

7.3.Các Ki ud li uc ả 7.3.1 Ki u CHAR ể

7.3.1. Ki u 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

7.3.2. Ki u 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 ề ự ự ề ủ ụ

Oracle c b n - SQL và PL/SQL ơ ả

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.

7.3.3. Ki u VARCHAR ể

Hi n t i Oracle xem ki u ệ ạ ể VARCHAR2 và VARCHAR là nh nhau, tuy nhiên Oracle khuyên nên ư dùng VARCHAR2. Oracle d đ nh trong tự ị ương lai dùng ki u ể VARCHAR đ ch a các chu i v i ể ứ ỗ ớ chi u dài bi n đ i, nh ng trong phép so sánh s đề ế ổ ư ẽ ược ch đ nh theo nhi u ng nghĩa khác ỉ ị ề ữ nhau.

7.3.4. Ki u 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)

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), s t -84 đ n 127 ừ ế

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. ụ ố ớ ấ ấ ộ

Ví d sau cho th y cách th c Oracle l u tr d li u ki u s tùy theo cách đ nh precision và ụ ấ ứ ư ữ ữ ệ ể ố ị scale khác nhau. D li u th c ữ ệ ự Ki u ể Giá tr l u tr ị ư ữ 7456123.89 NUMBER 7456123.89 7456123.89 NUMBER(9) 7456123 7456123.89 NUMBER(9,2) 7456123.89 7456123.89 NUMBER(9,1) 7456123.8 7456123.89 NUMBER(6) Không h p l ợ ệ 7456123.8 NUMBER(15,1) 7456123.8 7456123.89 NUMBER(7,-2) 7456100 7456123.89 NUMBER(-7,2) Không h p l ợ ệ 7.3.5. Ki u FLOAT ể

Dùng đ khai báo ki u s d u ch m đ ng, v i đ chính xác th p phân 38 hay đ chính xác nh phân là 126.ể ể ố ấ ấ ộ ớ ộ ậ ộ ị

FLOAT(b) Khai báo ki u d u ch m đ ng v i đ chính xác nh phân là b, b t 1 đ n 126. Có th chuy nể ấ ấ ộ ớ ộ ị ừ ế ể ể t đ chính xác nh ph n sang đ chính xác th p phân b ng cách nhân đ chính xác nh phân v i 0.30103 ừ ộ ị ậ ộ ậ ằ ộ ị ớ 7.3.6. Ki u LONG ể

Dùng đ khai báo ki u chu i ký t v i đ dài bi n đ i, chi u dài t i đa c a ki u ể ể ỗ ự ớ ộ ế ổ ề ố ủ ể LONG là 2 gigabyte. Ki uể

LONG thường được dùng đ ch a các văn b n. ể ứ ả Có m t s h n ch khi dùng ki u ộ ố ạ ế ể LONG

M t table không th ch a nhi u h n m t c t ki u ộ ể ứ ề ơ ộ ộ ể LONG

D li u ki u ữ ệ ể LONG không th tham gia vào các ràng bu c toàn v n, ngo i tr ki m tra ể ộ ẹ ạ ừ ể

NULL và khác NULL

Không th index m t c t ki u ể ộ ộ ể LONG

Không th truy n tham s ki u ể ề ố ể LONG cho hàm ho c th t c ặ ủ ụ Các hàm không th tr v d li u ki u ể ả ề ữ ệ ể LONG

Trong câu l nh SQL có truy c p các c t ki u ệ ậ ộ ể LONG, thì vi c c p nh t ho c khóa các ệ ậ ậ ặ b ng ch cho phép trong cùng m t CSDL ả ỉ ộ

Ngoài ra, các c t ki u ộ ể LONG không được tham gia trong các thành ph n sau c a câu l nh ầ ủ ệ SQL

Các m nh đ ệ ề WHERE, GROUP BY, ORDER BY, CONNECT BY ho c v i tác t ặ ớ ử

DISTINCT trong câu l nh ệ SELECT

Các hàm s d ng trong câu l nh SQL nh ử ụ ệ ưSUBSTR, INSTR

Trong danh sách l a ch n c a câu l nh ự ọ ủ ệ SELECT có s d ng m nh đ ử ụ ệ ềGROUP BYTrong danh sách l a ch n c a câu h i con, câu h i có s d ng các toán t t p h p ự ọ ủ ỏ ỏ ử ụ ử ậ ợ Trong danh sách l aự ch n c a câu l nh ọ ủ ệ CREATE TABLE AS SELECT

7.3.7. Ki u 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 gi đê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. ờ ệ ố

Tính toán đ i v i ki u ngày ố ớ ể

Đ i v i d li u ki u ngày, b n có th th c hi n các phép toán c ng và tr . Ví d : ố ớ ữ ệ ể ạ ể ự ệ ộ ừ ụ

SYSDATE+1 ngày hôm sau SYSDATE-7 cách đây m t tu n ộ ầ

SYSDATE+(10/1440) mười phút sau

Ngày Julian: Là giá tr s cho bi t s ngày k t ngày 1 tháng giêng năm 4712 trị ố ế ố ể ừ ước công nguyên. Ví d : ụ

SELECT TO_CHAR (TO_DATE('01-01-1992', 'MM-DD-YYYY'), 'J') JULIAN FROM DUAL; FROM DUAL;

K t qu : ế ả

JULIAN 2448623 2448623

Oracle c b n - SQL và PL/SQL ơ ả

7.3.8. Ki u RAW và ki u LONG RAW ể ể

Ki u ể RAW và LONG RAW dùng đ ch a các chu i byte, các d li u nh phân nh hình nh, âm thanh. Cácể ứ ỗ ữ ệ ị ư ả d li u ki u ữ ệ ể RAW ch có th gán ho c truy c p ch không đỉ ể ặ ậ ứ ược th c hi n các thao tác nh đ i v i chu iự ệ ư ố ớ ỗ ký t . ự

Ki u ể RAW gi ng nh ki u ố ư ể VARCHAR2 và ki u ể LONG RAW gi ng ki u ố ể LONG, ch khác nhau ch Oracleỉ ở ổ t đ ng chuy n đ i các giá tr ki u ự ộ ể ổ ị ể CHAR, VARCHAR2 và LONG gi a t p h p ký t c a CSDL và t p ký tữ ậ ợ ự ủ ậ ự c a các ng d ng. ủ ứ ụ

7.3.9. Ki u ROWID ể

M i m u tin trong CSDL có m t đ a ch có ki u ỗ ẫ ộ ị ỉ ể ROWID. ROWID bao g m các thành ph n: ồ ầ

block.row.file.

V i ớ

block Chu i h hexa cho bi t block ch a row ỗ ệ ế ứ

row Chu i h hexa cho bi t row trong block ỗ ệ ế

file Chu i h hexa cho bi t database file ch a block ỗ ệ ế ứ

Ví d : ụ

0000000F.0000.0002

Row đ u tiên trong block 15 c a data file th hai. ầ ủ ứ 7.3.10. Ki u MLSLABEL ể

Ki u MLSLABEL dùng đ ch a label d ng nh phân mà Oracle dùng đ đ m b o ho t đ ng c a b n thânể ể ứ ạ ị ể ả ả ạ ộ ủ ả h th ng. ệ ố

7.3.11. Chuy n đ i ki u ể ổ ể

Chuy n đ i m c đ nh ể ổ ặ ị

Nói chung m t bi u th c không th g m các giá tr thu c nhi u ki u khác nhau, tuy nhiên Oracle cho phépộ ể ứ ể ồ ị ộ ề ể chuy n đ i gi ã các ki u d li u. Oracle t đ ng chuy n ki u c a d li u trong m t s trể ổ ư ể ữ ệ ự ộ ể ể ủ ữ ệ ộ ố ường h p sau ợ

Khi INSERT ho c ặ UPDATE gán giá tr cho c t có ki u khác, Oracle s t đ ng chuy n ị ộ ể ẽ ự ộ ể giá tr sang ki u c a c t. ị ể ủ ộ

Khi s d ng các hàm ho c các toán t mà các tham s có ki u không tử ụ ặ ử ố ể ương thích thì Oracle s t đ ng chuy n ki u. ẽ ự ộ ể ể

Khi s d ng toán t so sánh mà các giá tr có các ki u khác nhau, Oracle s t đ ng ử ụ ử ị ể ẽ ự ộ chuy n ki u. ể ể

Ví d 1: ụ

SELECT ename FROM emp WHERE hiredate = '12-MAR-1993'

Oracle đã t đ ng chuy n chu i ự ộ ể ỗ '12-MAR-1993' sang ki u ể DATE trong phép so sánh Ví d 2: ụ

SELECT ename FROM emp WHERE ROWID = '00002514.0001.0001'

Oracle đã t đ ng chuy n chu i ự ộ ể ỗ '00002514.0001.0001' sang ki u ể ROWID trong phép so sánh

Ngườ ử ụi s d ng t chuy n đ i ự ể ổ

Oracle cung c p các hàm đ chuy n đ i ki u, ví d ấ ể ể ổ ể ụ

TO_NUMBER Chuy n sang ki u s ể ể ố

TO_CHAR Chuy n sang ki u ký t ể ể ự

TO_DATE Chuy n sang ki u ngày ể ể (xem ph n tra c u các hàm và th t c) ầ ứ ủ ụ 7.4.RÀNG BU C D LI U TRONG TABLE Ộ Ữ Ệ Các d ng constraint g m: ạ ồ NULL/NOTNULL UNIQUE PRIMARYKEY

FOREIGNKEY (Referential Key)

CHECK

7.4.1. NULL/NOT NULL

Là ràng bu c column tr ng ho c không tr ng. ộ ố ặ ố Ví d m nh đ ràng bu c: ụ ệ ề ộ

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

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

Oracle c b n - SQL và PL/SQL ơ ả

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

[CONSTRAINT constraint_name] PRIMARY KEY

7.4.4. FOREIGN KEY ( Referential )

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

7.4.5. CHECK

Ràng bu c ki m tra giá tr . ộ ể ị Ví d : ụ

CREATE TABLE EMP

(EMPNO NUMBER NOT NULL CONSTRAINT PK_EMP PRIMARY KEY, ENAME VARCHAR2(10) CONSTRAINT NN_ENAME NOT NULL ENAME VARCHAR2(10) CONSTRAINT NN_ENAME NOT NULL CONSTRAINT UPPER_ENAME CHECK (ENAME =

UPPER(ENAME)), JOB VARCHAR2(9), JOB VARCHAR2(9),

MGR NUMBER CONSTRAINT FK_MGR REFERENCES SCOTT.EMP(EMPNO), SCOTT.EMP(EMPNO),

HIREDATE DATE DEFAULT SYSDATE, SAL NUMBER(10,2) CONSTRAINT CK_SAL NUMBER(10,2) CONSTRAINT CK_SAL

CHECK(SAL>500),

COMM NUMBER(9,0) DEFAULT NULL,

DEPTNO NUMBER(2) CONSTRAINT NN_DEPTNO NOT NULL

CONSTRAINT FK_DEPTNO REFERENCES SCOTT.DEPT(DEPTNO);

7.5.L NH DDL CAN THI P T I TABLE Ệ Ệ Ớ7.5.1. Ch nh s a c u trúc table ỉ ử ấ

Một phần của tài liệu Oracle cơ bản - SQL và PL/SQL pptx (Trang 58 - 63)

Tải bản đầy đủ (PDF)

(106 trang)