PL / SQL - ประเภทข้อมูล
ในบทนี้เราจะพูดถึงประเภทข้อมูลใน PL / SQL ตัวแปร PL / SQL ค่าคงที่และพารามิเตอร์ต้องมีชนิดข้อมูลที่ถูกต้องซึ่งระบุรูปแบบการจัดเก็บข้อ จำกัด และช่วงค่าที่ถูกต้อง เราจะมุ่งเน้นไปที่SCALAR และ LOBชนิดข้อมูลในบทนี้ ข้อมูลอีกสองประเภทจะครอบคลุมในบทอื่น ๆ
ส. เลขที่ | หมวดหมู่และคำอธิบาย |
---|---|
1 | Scalar ค่าเดียวที่ไม่มีส่วนประกอบภายในเช่นก NUMBER, DATE, หรือ BOOLEAN. |
2 | Large Object (LOB) ชี้ไปยังวัตถุขนาดใหญ่ที่จัดเก็บแยกจากรายการข้อมูลอื่น ๆ เช่นข้อความรูปภาพกราฟิกคลิปวิดีโอและรูปคลื่นเสียง |
3 | Composite รายการข้อมูลที่มีส่วนประกอบภายในที่สามารถเข้าถึงได้ทีละรายการ ตัวอย่างเช่นคอลเลกชันและบันทึก |
4 | Reference ชี้ไปยังรายการข้อมูลอื่น ๆ |
PL / SQL Scalar Data types and Subtypes
PL / SQL Scalar Data types and Subtypes อยู่ภายใต้หมวดหมู่ต่อไปนี้ -
ส. เลขที่ | ประเภทวันที่และคำอธิบาย |
---|---|
1 | Numeric ค่าตัวเลขที่ดำเนินการทางคณิตศาสตร์ |
2 | Character ค่าตัวอักษรและตัวเลขที่แสดงถึงอักขระเดี่ยวหรือสตริงของอักขระ |
3 | Boolean ค่าตรรกะที่ดำเนินการทางตรรกะ |
4 | Datetime วันที่และเวลา |
PL / SQL จัดเตรียมชนิดย่อยของชนิดข้อมูล ตัวอย่างเช่นข้อมูลประเภท NUMBER มีประเภทย่อยที่เรียกว่า INTEGER คุณสามารถใช้ชนิดย่อยในโปรแกรม PL / SQL ของคุณเพื่อทำให้ชนิดข้อมูลเข้ากันได้กับชนิดข้อมูลในโปรแกรมอื่น ๆ ในขณะที่ฝังโค้ด PL / SQL ในโปรแกรมอื่นเช่นโปรแกรม Java
PL / SQL ชนิดข้อมูลตัวเลขและชนิดย่อย
ตารางต่อไปนี้แสดงชนิดข้อมูลตัวเลขที่กำหนดไว้ล่วงหน้าของ PL / SQL และประเภทย่อย -
ส. เลขที่ | ประเภทข้อมูลและคำอธิบาย |
---|---|
1 | PLS_INTEGER จำนวนเต็มที่ลงชื่อในช่วง -2,147,483,648 ถึง 2,147,483,647 ซึ่งแสดงเป็น 32 บิต |
2 | BINARY_INTEGER จำนวนเต็มที่ลงชื่อในช่วง -2,147,483,648 ถึง 2,147,483,647 ซึ่งแสดงเป็น 32 บิต |
3 | BINARY_FLOAT เลขทศนิยมรูปแบบ IEEE 754 ความแม่นยำเดียว |
4 | BINARY_DOUBLE เลขทศนิยมรูปแบบ IEEE 754 ที่มีความแม่นยำสองเท่า |
5 | NUMBER(prec, scale) ตัวเลขจุดคงที่หรือทศนิยมที่มีค่าสัมบูรณ์ในช่วง 1E-130 ถึง (แต่ไม่รวม) 1.0E126 ตัวแปร NUMBER ยังสามารถแทนค่า 0 |
6 | DEC(prec, scale) ประเภทจุดคงที่เฉพาะของ ANSI ที่มีความแม่นยำสูงสุด 38 หลักทศนิยม |
7 | DECIMAL(prec, scale) ประเภทจุดคงที่เฉพาะของ IBM ที่มีความแม่นยำสูงสุด 38 หลักทศนิยม |
8 | NUMERIC(pre, secale) ประเภทลอยที่มีความแม่นยำสูงสุด 38 หลักทศนิยม |
9 | DOUBLE PRECISION ประเภททศนิยมเฉพาะ ANSI ที่มีความแม่นยำสูงสุด 126 หลักไบนารี (ทศนิยมประมาณ 38 หลัก) |
10 | FLOAT ประเภททศนิยมเฉพาะของ ANSI และ IBM ที่มีความแม่นยำสูงสุด 126 หลักไบนารี (ทศนิยมประมาณ 38 หลัก) |
11 | INT ประเภทจำนวนเต็มเฉพาะ ANSI ที่มีความแม่นยำสูงสุด 38 หลักทศนิยม |
12 | INTEGER ประเภทจำนวนเต็มเฉพาะ ANSI และ IBM ที่มีความแม่นยำสูงสุด 38 หลักทศนิยม |
13 | SMALLINT ประเภทจำนวนเต็มเฉพาะ ANSI และ IBM ที่มีความแม่นยำสูงสุด 38 หลักทศนิยม |
14 | REAL ประเภททศนิยมที่มีความแม่นยำสูงสุด 63 หลัก (ทศนิยมประมาณ 18 หลัก) |
ต่อไปนี้เป็นการประกาศที่ถูกต้อง -
DECLARE
num1 INTEGER;
num2 REAL;
num3 DOUBLE PRECISION;
BEGIN
null;
END;
/
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -
PL/SQL procedure successfully completed
ชนิดข้อมูลอักขระ PL / SQL และชนิดย่อย
ต่อไปนี้เป็นรายละเอียดของชนิดข้อมูลอักขระที่กำหนดไว้ล่วงหน้า PL / SQL และประเภทย่อย -
ส. เลขที่ | ประเภทข้อมูลและคำอธิบาย |
---|---|
1 | CHAR สตริงอักขระที่มีความยาวคงที่ที่มีขนาดสูงสุด 32,767 ไบต์ |
2 | VARCHAR2 สตริงอักขระความยาวตัวแปรที่มีขนาดสูงสุด 32,767 ไบต์ |
3 | RAW สตริงไบนารีหรือไบต์ที่มีความยาวตัวแปรที่มีขนาดสูงสุด 32,767 ไบต์ไม่ได้รับการตีความโดย PL / SQL |
4 | NCHAR สตริงอักขระประจำชาติที่มีความยาวคงที่ที่มีขนาดสูงสุด 32,767 ไบต์ |
5 | NVARCHAR2 สตริงอักขระประจำชาติที่มีความยาวตัวแปรที่มีขนาดสูงสุด 32,767 ไบต์ |
6 | LONG สตริงอักขระความยาวตัวแปรที่มีขนาดสูงสุด 32,760 ไบต์ |
7 | LONG RAW สตริงไบนารีหรือไบต์ที่มีความยาวตัวแปรที่มีขนาดสูงสุด 32,760 ไบต์ไม่ถูกตีความโดย PL / SQL |
8 | ROWID ตัวระบุแถวทางกายภาพที่อยู่ของแถวในตารางธรรมดา |
9 | UROWID ตัวระบุแถวสากล (ตัวระบุแถวทางกายภาพตรรกะหรือแปลกปลอม) |
ชนิดข้อมูลบูลีน PL / SQL
BOOLEANชนิดข้อมูลเก็บค่าตรรกะที่ใช้ในการดำเนินการทางตรรกะ ค่าตรรกะคือค่าบูลีนTRUE และ FALSE และมูลค่า NULL.
อย่างไรก็ตาม SQL ไม่มีชนิดข้อมูลที่เทียบเท่ากับ BOOLEAN ดังนั้นจึงไม่สามารถใช้ค่าบูลีนใน -
- คำสั่ง SQL
- ฟังก์ชัน SQL ในตัว (เช่น TO_CHAR)
- ฟังก์ชัน PL / SQL เรียกใช้จากคำสั่ง SQL
PL / SQL Datetime และประเภทช่วงเวลา
DATEประเภทข้อมูลใช้เพื่อจัดเก็บวันที่ที่มีความยาวคงที่ซึ่งรวมเวลาของวันเป็นวินาทีตั้งแต่เที่ยงคืน วันที่ใช้ได้ตั้งแต่ 1 มกราคม 4712 ปีก่อนคริสตกาลถึง 31 ธันวาคม ค.ศ. 9999
รูปแบบวันที่เริ่มต้นถูกกำหนดโดยพารามิเตอร์การเตรียมใช้งาน Oracle NLS_DATE_FORMAT ตัวอย่างเช่นค่าเริ่มต้นอาจเป็น "DD-MON-YY" ซึ่งประกอบด้วยตัวเลขสองหลักสำหรับวันของเดือนตัวย่อของชื่อเดือนและตัวเลขสองหลักสุดท้ายของปี ตัวอย่างเช่น 01-OCT-12
แต่ละ DATE ประกอบด้วยศตวรรษปีเดือนวันชั่วโมงนาทีและวินาที ตารางต่อไปนี้แสดงค่าที่ถูกต้องสำหรับแต่ละฟิลด์ -
ชื่อฟิลด์ | ค่า Datetime ที่ถูกต้อง | ค่าช่วงเวลาที่ถูกต้อง |
---|---|---|
ปี | -4712 ถึง 9999 (ไม่รวมปี 0) | จำนวนเต็มที่ไม่ใช่ศูนย์ |
เดือน | 01 ถึง 12 | 0 ถึง 11 |
วัน | 01 ถึง 31 (จำกัด โดยค่าของ MONTH และ YEAR ตามกฎของปฏิทินสำหรับภาษา) | จำนวนเต็มที่ไม่ใช่ศูนย์ |
ชั่วโมง | 00 ถึง 23 | 0 ถึง 23 |
นาที | 00 ถึง 59 | 0 ถึง 59 |
วินาที | 00 ถึง 59.9 (n) โดยที่ 9 (n) คือความแม่นยำของเวลาเศษส่วนของวินาที | 0 ถึง 59.9 (n) โดยที่ 9 (n) คือความแม่นยำของช่วงเศษส่วนของวินาที |
TIMEZONE_HOUR | -12 ถึง 14 (ช่วงรองรับการเปลี่ยนแปลงเวลาออมแสง) | ไม่สามารถใช้ได้ |
TIMEZONE_MINUTE | 00 ถึง 59 | ไม่สามารถใช้ได้ |
TIMEZONE_REGION | พบในมุมมองประสิทธิภาพแบบไดนามิก V $ TIMEZONE_NAMES | ไม่สามารถใช้ได้ |
TIMEZONE_ABBR | พบในมุมมองประสิทธิภาพแบบไดนามิก V $ TIMEZONE_NAMES | ไม่สามารถใช้ได้ |
ประเภทข้อมูล PL / SQL Large Object (LOB)
ประเภทข้อมูล Large Object (LOB) หมายถึงรายการข้อมูลขนาดใหญ่เช่นข้อความรูปภาพกราฟิกคลิปวิดีโอและรูปคลื่นเสียง ประเภทข้อมูล LOB ช่วยให้สามารถเข้าถึงข้อมูลนี้แบบสุ่มได้อย่างมีประสิทธิภาพ ต่อไปนี้เป็นชนิดข้อมูล PL / SQL LOB ที่กำหนดไว้ล่วงหน้า -
ประเภทข้อมูล | คำอธิบาย | ขนาด |
---|---|---|
BFILE | ใช้เพื่อเก็บวัตถุไบนารีขนาดใหญ่ในไฟล์ระบบปฏิบัติการนอกฐานข้อมูล | ขึ้นอยู่กับระบบ ต้องไม่เกิน 4 กิกะไบต์ (GB) |
หยด | ใช้เพื่อเก็บวัตถุไบนารีขนาดใหญ่ในฐานข้อมูล | 8 ถึง 128 เทราไบต์ (TB) |
CLOB | ใช้เพื่อจัดเก็บข้อมูลอักขระจำนวนมากในฐานข้อมูล | 8 ถึง 128 TB |
NCLOB | ใช้เพื่อจัดเก็บข้อมูล NCHAR จำนวนมากในฐานข้อมูล | 8 ถึง 128 TB |
ชนิดย่อยที่ผู้ใช้กำหนด PL / SQL
ประเภทย่อยคือชุดย่อยของชนิดข้อมูลอื่นซึ่งเรียกว่าประเภทฐาน ประเภทย่อยมีการดำเนินการที่ถูกต้องเช่นเดียวกับประเภทฐาน แต่มีเพียงค่าย่อยที่ถูกต้องเท่านั้น
PL / SQL กำหนดชนิดย่อยต่างๆไว้ล่วงหน้าในแพ็คเกจ STANDARD. ตัวอย่างเช่น PL / SQL กำหนดชนิดย่อยไว้ล่วงหน้าCHARACTER และ INTEGER ดังต่อไปนี้ -
SUBTYPE CHARACTER IS CHAR;
SUBTYPE INTEGER IS NUMBER(38,0);
คุณสามารถกำหนดและใช้ประเภทย่อยของคุณเองได้ โปรแกรมต่อไปนี้แสดงให้เห็นถึงการกำหนดและใช้ประเภทย่อยที่ผู้ใช้กำหนดเอง -
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;
/
เมื่อรหัสด้านบนถูกเรียกใช้ที่พรอมต์ SQL จะให้ผลลัพธ์ดังต่อไปนี้ -
Hello Reader Welcome to the World of PL/SQL
PL/SQL procedure successfully completed.
NULL ใน PL / SQL
ค่า PL / SQL NULL แสดงถึง missing หรือ unknown dataและไม่ใช่จำนวนเต็มอักขระหรือชนิดข้อมูลเฉพาะอื่น ๆ โปรดทราบว่าNULL ไม่เหมือนกับสตริงข้อมูลว่างหรือค่าอักขระ null '\0'. สามารถกำหนดค่าว่างได้ แต่ไม่สามารถเทียบได้กับสิ่งใดรวมทั้งตัวมันเอง