PL / SQL - Các kiểu dữ liệu
Trong chương này, chúng ta sẽ thảo luận về các kiểu dữ liệu trong PL / SQL. Các biến, hằng số và tham số PL / SQL phải có kiểu dữ liệu hợp lệ, kiểu dữ liệu này chỉ định định dạng lưu trữ, các ràng buộc và phạm vi giá trị hợp lệ. Chúng tôi sẽ tập trung vàoSCALAR và LOBcác kiểu dữ liệu trong chương này. Hai kiểu dữ liệu còn lại sẽ được đề cập trong các chương khác.
S.Không | Danh mục & Mô tả |
---|---|
1 | Scalar Các giá trị đơn lẻ không có thành phần bên trong, chẳng hạn như NUMBER, DATE, hoặc là BOOLEAN. |
2 | Large Object (LOB) Con trỏ đến các đối tượng lớn được lưu trữ riêng biệt với các mục dữ liệu khác, chẳng hạn như văn bản, hình ảnh đồ họa, video clip và dạng sóng âm thanh. |
3 | Composite Các mục dữ liệu có các thành phần bên trong có thể được truy cập riêng lẻ. Ví dụ, bộ sưu tập và bản ghi. |
4 | Reference Con trỏ đến các mục dữ liệu khác. |
Kiểu dữ liệu vô hướng và kiểu con PL / SQL
Các kiểu dữ liệu vô hướng và kiểu con PL / SQL thuộc các danh mục sau:
S.Không | Loại ngày & Mô tả |
---|---|
1 | Numeric Các giá trị số mà các phép toán số học được thực hiện. |
2 | Character Giá trị chữ và số đại diện cho các ký tự đơn hoặc chuỗi ký tự. |
3 | Boolean Các giá trị logic mà các phép toán logic được thực hiện. |
4 | Datetime Ngày và giờ. |
PL / SQL cung cấp các kiểu con của kiểu dữ liệu. Ví dụ, kiểu dữ liệu NUMBER có một kiểu con gọi là INTEGER. Bạn có thể sử dụng các kiểu con trong chương trình PL / SQL của mình để làm cho kiểu dữ liệu tương thích với kiểu dữ liệu trong các chương trình khác trong khi nhúng mã PL / SQL vào chương trình khác, chẳng hạn như chương trình Java.
Kiểu dữ liệu số PL / SQL và kiểu con
Bảng sau liệt kê các kiểu dữ liệu số được xác định trước PL / SQL và các kiểu con của chúng -
S.Không | Loại dữ liệu & Mô tả |
---|---|
1 | PLS_INTEGER Số nguyên có dấu trong phạm vi -2,147,483,648 đến 2,147,483,647, được biểu diễn bằng 32 bit |
2 | BINARY_INTEGER Số nguyên có dấu trong phạm vi -2,147,483,648 đến 2,147,483,647, được biểu diễn bằng 32 bit |
3 | BINARY_FLOAT Số dấu phẩy động định dạng IEEE 754 chính xác đơn |
4 | BINARY_DOUBLE Số dấu phẩy động định dạng IEEE 754 chính xác kép |
5 | NUMBER(prec, scale) Số dấu phẩy cố định hoặc dấu phẩy động có giá trị tuyệt đối trong phạm vi 1E-130 đến (nhưng không bao gồm) 1.0E126. Một biến NUMBER cũng có thể đại diện cho 0 |
6 | DEC(prec, scale) Loại điểm cố định cụ thể ANSI với độ chính xác tối đa là 38 chữ số thập phân |
7 | DECIMAL(prec, scale) Loại điểm cố định cụ thể của IBM với độ chính xác tối đa là 38 chữ số thập phân |
số 8 | NUMERIC(pre, secale) Loại nổi với độ chính xác tối đa là 38 chữ số thập phân |
9 | DOUBLE PRECISION Loại dấu phẩy động cụ thể ANSI với độ chính xác tối đa là 126 chữ số nhị phân (khoảng 38 chữ số thập phân) |
10 | FLOAT ANSI và kiểu dấu phẩy động cụ thể của IBM với độ chính xác tối đa là 126 chữ số nhị phân (khoảng 38 chữ số thập phân) |
11 | INT Loại số nguyên cụ thể ANSI với độ chính xác tối đa là 38 chữ số thập phân |
12 | INTEGER ANSI và kiểu số nguyên cụ thể của IBM với độ chính xác tối đa là 38 chữ số thập phân |
13 | SMALLINT ANSI và kiểu số nguyên cụ thể của IBM với độ chính xác tối đa là 38 chữ số thập phân |
14 | REAL Loại dấu phẩy động với độ chính xác tối đa là 63 chữ số nhị phân (khoảng 18 chữ số thập phân) |
Sau đây là một khai báo hợp lệ -
DECLARE
num1 INTEGER;
num2 REAL;
num3 DOUBLE PRECISION;
BEGIN
null;
END;
/
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
PL/SQL procedure successfully completed
Kiểu dữ liệu ký tự PL / SQL và kiểu con
Sau đây là chi tiết về các kiểu dữ liệu ký tự được xác định trước PL / SQL và các kiểu con của chúng:
S.Không | Loại dữ liệu & Mô tả |
---|---|
1 | CHAR Chuỗi ký tự có độ dài cố định với kích thước tối đa là 32,767 byte |
2 | VARCHAR2 Chuỗi ký tự có độ dài thay đổi với kích thước tối đa là 32,767 byte |
3 | RAW Chuỗi nhị phân hoặc chuỗi byte có độ dài thay đổi với kích thước tối đa là 32,767 byte, không được giải thích bằng PL / SQL |
4 | NCHAR Chuỗi ký tự quốc gia có độ dài cố định với kích thước tối đa là 32,767 byte |
5 | NVARCHAR2 Chuỗi ký tự quốc gia có độ dài thay đổi với kích thước tối đa là 32,767 byte |
6 | LONG Chuỗi ký tự có độ dài thay đổi với kích thước tối đa là 32.760 byte |
7 | LONG RAW Chuỗi nhị phân hoặc byte có độ dài thay đổi với kích thước tối đa là 32.760 byte, không được giải thích bằng PL / SQL |
số 8 | ROWID Định danh hàng vật lý, địa chỉ của một hàng trong một bảng thông thường |
9 | UROWID Định danh hàng chung (định danh hàng vật lý, lôgic hoặc ngoại lai) |
Các kiểu dữ liệu Boolean PL / SQL
Các BOOLEANkiểu dữ liệu lưu trữ các giá trị logic được sử dụng trong các phép toán logic. Các giá trị logic là các giá trị BooleanTRUE và FALSE và giá trị NULL.
Tuy nhiên, SQL không có kiểu dữ liệu tương đương với BOOLEAN. Do đó, các giá trị Boolean không thể được sử dụng trong:
- Câu lệnh SQL
- Các hàm SQL tích hợp sẵn (chẳng hạn như TO_CHAR)
- Các hàm PL / SQL được gọi từ các câu lệnh SQL
PL / SQL kiểu ngày giờ và khoảng thời gian
Các DATEdatatype được sử dụng để lưu trữ lịch ngày dài cố định, bao gồm thời gian trong ngày tính bằng giây kể từ nửa đêm. Ngày có hiệu lực từ ngày 1 tháng 1 năm 4712 trước Công nguyên đến ngày 31 tháng 12 năm 9999 sau Công nguyên.
Định dạng ngày mặc định được đặt bởi tham số khởi tạo Oracle NLS_DATE_FORMAT. Ví dụ: mặc định có thể là 'DD-MON-YY', bao gồm một số có hai chữ số cho ngày trong tháng, chữ viết tắt của tên tháng và hai chữ số cuối cùng của năm. Ví dụ: 01-OCT-12.
Mỗi DATE bao gồm thế kỷ, năm, tháng, ngày, giờ, phút và giây. Bảng sau đây hiển thị các giá trị hợp lệ cho mỗi trường:
Tên trường | Giá trị ngày giờ hợp lệ | Giá trị khoảng thời gian hợp lệ |
---|---|---|
NĂM | -4712 đến 9999 (không bao gồm năm 0) | Mọi số nguyên khác không |
THÁNG | 01 đến 12 | 0 đến 11 |
NGÀY | 01 đến 31 (giới hạn bởi các giá trị của THÁNG và NĂM, theo quy tắc của lịch cho ngôn ngữ) | Mọi số nguyên khác không |
GIỜ | 00 đến 23 | 0 đến 23 |
PHÚT | 00 đến 59 | 0 đến 59 |
THỨ HAI | 00 đến 59,9 (n), trong đó 9 (n) là độ chính xác của giây phân số thời gian | 0 đến 59,9 (n), trong đó 9 (n) là độ chính xác của khoảng phân số giây |
TIMEZONE_HOUR | -12 đến 14 (phạm vi có thể thay đổi thời gian tiết kiệm ánh sáng ban ngày) | Không áp dụng |
TIMEZONE_MINUTE | 00 đến 59 | Không áp dụng |
TIMEZONE_REGION | Tìm thấy trong chế độ xem hiệu suất động V $ TIMEZONE_NAMES | Không áp dụng |
TIMEZONE_ABBR | Tìm thấy trong chế độ xem hiệu suất động V $ TIMEZONE_NAMES | Không áp dụng |
Kiểu dữ liệu đối tượng lớn PL / SQL (LOB)
Kiểu dữ liệu Đối tượng Lớn (LOB) đề cập đến các mục dữ liệu lớn như văn bản, hình ảnh đồ họa, video clip và dạng sóng âm thanh. Các kiểu dữ liệu LOB cho phép truy cập hiệu quả, ngẫu nhiên, từng phần vào dữ liệu này. Sau đây là các kiểu dữ liệu PL / SQL LOB được xác định trước:
Loại dữ liệu | Sự miêu tả | Kích thước |
---|---|---|
NỀN | Được sử dụng để lưu trữ các đối tượng nhị phân lớn trong các tệp hệ điều hành bên ngoài cơ sở dữ liệu. | Phụ thuộc vào hệ thống. Không được vượt quá 4 gigabyte (GB). |
BÃI | Được sử dụng để lưu trữ các đối tượng nhị phân lớn trong cơ sở dữ liệu. | 8 đến 128 terabyte (TB) |
CLOB | Được sử dụng để lưu trữ các khối dữ liệu ký tự lớn trong cơ sở dữ liệu. | 8 đến 128 TB |
NCLOB | Được sử dụng để lưu trữ các khối dữ liệu NCHAR lớn trong cơ sở dữ liệu. | 8 đến 128 TB |
Các kiểu con PL / SQL do người dùng xác định
Kiểu con là một tập con của kiểu dữ liệu khác, được gọi là kiểu cơ sở của nó. Kiểu con có các phép toán hợp lệ giống như kiểu cơ sở của nó, nhưng chỉ là một tập hợp con của các giá trị hợp lệ của nó.
PL / SQL xác định trước một số kiểu con trong gói STANDARD. Ví dụ: PL / SQL xác định trước các kiểu conCHARACTER và INTEGER như sau -
SUBTYPE CHARACTER IS CHAR;
SUBTYPE INTEGER IS NUMBER(38,0);
Bạn có thể xác định và sử dụng các kiểu phụ của riêng mình. Chương trình sau minh họa việc xác định và sử dụng kiểu con do người dùng xác định:
DECLARE
SUBTYPE name IS char(20);
SUBTYPE message IS varchar2(100);
salutation name;
greetings message;
BEGIN
salutation := 'Reader ';
greetings := 'Welcome to the World of PL/SQL';
dbms_output.put_line('Hello ' || salutation || greetings);
END;
/
Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:
Hello Reader Welcome to the World of PL/SQL
PL/SQL procedure successfully completed.
NULL trong PL / SQL
Giá trị PL / SQL NULL đại diện missing hoặc là unknown datavà chúng không phải là một số nguyên, một ký tự hoặc bất kỳ kiểu dữ liệu cụ thể nào khác. Lưu ý rằngNULL không giống như một chuỗi dữ liệu trống hoặc giá trị ký tự rỗng '\0'. Một null có thể được gán nhưng nó không thể được đánh đồng với bất cứ thứ gì, kể cả chính nó.