Thứ Tư, 26 tháng 10, 2022

PL/SQL - Kiểu dữ liệu (data type)

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 ta sẽ tập trung vào kiểu dữ liệu SCALAR và LOB 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 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

Tài liệu tham khảo

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 được 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.No

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 một lần

4

BINARY_DOUBLE

Số dấu phẩy động định dạng IEEE 754 chính xác gấp đôi

5

NUMBER (chính xác, tỷ lệ)

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 (chính xác, quy mô)

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 (chính xác, tỷ lệ)

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

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

Kiểu số nguyên cụ thể của ANSI và IBM với độ chính xác tối đa là 38 chữ số thập phân

13

SMALLINT

Kiểu số nguyên cụ thể của ANSI và 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.No

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

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

Kiểu dữ liệu BOOLEAN lưu trữ các giá trị logic được sử dụng trong các phép toán logic. Các giá trị lôgic là các giá trị Boolean TRUE 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 (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

Loại dữ liệu DATE đượ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ệ

YEAR

-4712 đến 9999 (không bao gồm năm 0)

Mọi số nguyên khác không

MONTH

01 đến 12

0 đến 11

DAY

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

HOUR

00 đến 23

0 đến 23

MINUTE

00 đến 59

0 đến 59

SECOND

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. 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ự mô tả

Kích thước

BFILE

Đượ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).

BLOB

Đượ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 do người dùng xác định PL/SQL

Kiểu con là một tập hợ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á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 định nghĩa trước các kiểu con CHARACTER 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 cho dữ liệu bị thiếu hoặc không xác định và 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ằng NULL 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ó.


=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
PL/SQL, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master