Oracle ประเภทข้อมูล PL/SQL: บูลีน ตัวเลข วันที่ [ตัวอย่าง]

⚡ สรุปอย่างชาญฉลาด

ชนิดข้อมูล PL/SQL กำหนดวิธีการ Oracle ทำหน้าที่จัดเก็บ จัดการ และจำกัดค่าแต่ละค่าในบล็อก โดยจัดกลุ่มเป็นตระกูลอักขระ ตัวเลข บูลีน วันที่ และวัตถุขนาดใหญ่ (LOB) แต่ละตระกูลมีรูปแบบการจัดเก็บ ขีดจำกัดขนาด และกฎการกำหนดค่าเฉพาะของตนเอง

  • 🔤 ตัวอักษร: CHAR เป็นอักขระความยาวคงที่, VARCHAR2 เป็นอักขระความยาวแปรผัน และ NCHAR กับ NVARCHAR2 ใช้ชุดอักขระประจำชาติ
  • 🔢 จำนวน: ประเภทข้อมูล NUMBER สามารถจัดเก็บค่าคงที่หรือค่าทศนิยมได้แม่นยำถึง 38 หลัก
  • บูลีน: มีค่าเป็นจริงหรือเท็จ และใช้เป็นหลักในตรรกะแบบมีเงื่อนไข
  • 📅 วันที่: บันทึกวันที่และเวลา โดยค่าเริ่มต้นจะเป็นเที่ยงคืนหากไม่ได้ระบุเวลา
  • 🗂️ LOB: BLOB, CLOB, NCLOB และ BFILE สามารถจัดเก็บข้อมูลที่ไม่เป็นระเบียบขนาดใหญ่ได้ถึง 128 TB
  • 💡 ปฏิบัติที่ดีที่สุด: ควรเลือกใช้ VARCHAR2 แทน CHAR และ LOB แทน LONG เพื่อประหยัดหน่วยความจำและรองรับเทคโนโลยีในอนาคต
  • 🔗 ขอบเขต: ชนิดข้อมูลของ SQL ใช้กับคอลัมน์ของตาราง ส่วนชนิดข้อมูลของ PL/SQL ใช้ภายในบล็อกของ PL/SQL

Oracle ประเภทข้อมูล PL/SQL

ประเภทข้อมูลใน PL/SQL มีอะไรบ้าง?

ประเภทข้อมูล ใน PL/SQL ให้กำหนดวิธีการจัดเก็บ จัดการ และประมวลผลข้อมูล Oracle ระหว่างการจัดเก็บและการประมวลผล ประเภทข้อมูลจะเชื่อมโยงกับรูปแบบการจัดเก็บเฉพาะและข้อจำกัดช่วงค่า ใน Oracleแต่ละค่าหรือค่าคงที่ จะถูกกำหนดชนิดข้อมูลให้

ความแตกต่างที่สำคัญระหว่าง PL/SQL และ SQL ความแตกต่างระหว่างชนิดข้อมูลใน SQL กับ PL/SQL คือ ชนิดข้อมูลใน SQL จำกัดอยู่เฉพาะคอลัมน์ในตาราง ในขณะที่ชนิดข้อมูลใน PL/SQL ใช้ใน... บล็อก PL/SQLเราจะอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้ในบทช่วยสอนในภายหลัง

ต่อไปนี้เป็นแผนภาพแสดงความแตกต่างต่างๆ Oracle ประเภทข้อมูล PL/SQL:

ประเภทข้อมูลที่แตกต่างกันใน PL/SQL
ประเภทข้อมูลที่แตกต่างกันใน PL/SQL

ประเภทข้อมูล PL/SQL CHARACTER

ชนิดข้อมูลนี้จัดเก็บตัวอักษรและตัวเลขในรูปแบบสตริง ค่าตัวอักษรควรอยู่ภายในเครื่องหมายอัญประกาศเดี่ยวเสมอเมื่อกำหนดค่าให้กับชนิดข้อมูล CHARACTER

ชนิดข้อมูลอักขระนี้แบ่งประเภทเพิ่มเติมได้ดังนี้:

  • ชนิดข้อมูล CHAR (ขนาดสตริงคงที่)
  • ชนิดข้อมูล VARCHAR2 (ขนาดสตริงแปรผันได้)
  • ชนิดข้อมูล VARCHAR
  • NCHAR (ขนาดสตริงคงที่ดั้งเดิม)
  • NVARCHAR2 (ขนาดสตริงตัวแปรดั้งเดิม)
  • ยาวและยาว
ประเภทข้อมูล Descriptไอออน วากยสัมพันธ์
ชาร์ ชนิดข้อมูลนี้เก็บค่าสตริง และขนาดของสตริงจะคงที่ ณ เวลาที่ประกาศ ตัวแปร.

  • Oracle ตัวแปรจะเติมช่องว่างหากตัวแปรนั้นไม่ได้ใช้พื้นที่ตามขนาดที่ประกาศไว้ทั้งหมด ดังนั้น Oracle จัดสรรหน่วยความจำตามขนาดที่ประกาศไว้ แม้ว่าตัวแปรนั้นจะไม่ได้ใช้หน่วยความจำจนเต็มก็ตาม
  • ข้อจำกัดด้านขนาดคือ 1-2000 ไบต์
  • CHAR เหมาะสมกว่าในกรณีที่ต้องจัดการกับข้อมูลที่มีขนาดคงที่
grade CHAR;
manager CHAR (10):= 'guru99';

คำอธิบายไวยากรณ์:

  • คำสั่งแรกประกาศตัวแปร 'grade' ซึ่งเป็นชนิดข้อมูล CHAR โดยมีขนาดสูงสุด 1 ไบต์ (ค่าเริ่มต้น)
  • คำสั่งที่สองประกาศตัวแปร 'manager' ซึ่งเป็นชนิดข้อมูล CHAR โดยมีขนาดสูงสุด 10 ไบต์ และกำหนดค่าเป็น 'guru99' ซึ่งมีขนาด 6 ไบต์ Oracle ในกรณีนี้จะจัดสรรพื้นที่ 10 ไบต์ แทนที่จะเป็น 6 ไบต์
วาร์ชาร์2 ชนิดข้อมูลนี้ใช้เก็บสตริง แต่ความยาวไม่ตายตัว

  • ข้อจำกัดด้านขนาดคือ 1-4000 ไบต์สำหรับคอลัมน์ในตาราง และ 1-32767 ไบต์สำหรับตัวแปร
  • ขนาดของตัวแปรแต่ละตัวจะถูกกำหนดไว้ตอนประกาศ
  • Oracle ฟังก์ชันนี้จะจัดสรรหน่วยความจำหลังจากที่ตัวแปรได้รับการกำหนดค่าแล้ว ดังนั้นจึงใช้ความยาวจริงของสตริงที่จัดเก็บไว้ แทนที่จะเป็นขนาดที่ประกาศไว้
  • การใช้ VARCHAR2 แทน CHAR นั้นดีกว่าเสมอเพื่อเพิ่มประสิทธิภาพการใช้หน่วยความจำ
manager VARCHAR2(10) := 'guru99';

คำอธิบายไวยากรณ์:

  • คำสั่งนี้ประกาศตัวแปร 'manager' ซึ่งเป็นชนิดข้อมูล VARCHAR2 โดยมีขนาดสูงสุด 10 ไบต์ และกำหนดค่าเป็น 'guru99' ซึ่งมีขนาด 6 ไบต์ Oracle จัดสรรหน่วยความจำเพียง 6 ไบต์ในที่นี้
วาร์ชาร์ ซึ่งตรงกันกับประเภทข้อมูล VARCHAR2

  • การใช้ VARCHAR2 แทน VARCHAR เป็นวิธีปฏิบัติที่ดีเสมอเพื่อหลีกเลี่ยงการเปลี่ยนแปลงพฤติกรรม
manager VARCHAR(10) := 'guru99';

คำอธิบายไวยากรณ์:

  • คำสั่งนี้ประกาศตัวแปร 'manager' เป็นชนิดข้อมูล VARCHAR โดยมีขนาดสูงสุด 10 ไบต์ และกำหนดค่าเป็น 'guru99' ขนาด 6 ไบต์ Oracle ใช้พื้นที่เพียง 6 ไบต์ คล้ายกับ VARCHAR2
กช ชนิดข้อมูลนี้เหมือนกับ CHAR แต่ชุดอักขระเป็นชุดอักขระประจำชาติ

  • ชุดอักขระนี้สามารถกำหนดได้สำหรับเซสชันโดยใช้ NLS_PARAMETERS
  • ชุดอักขระอาจเป็น UTF16 หรือ UTF8 ก็ได้
  • ข้อจำกัดด้านขนาดคือ 1-2000 ไบต์
native NCHAR(10);

คำอธิบายไวยากรณ์:

  • คำสั่งนี้ประกาศตัวแปร 'native' ที่มีชนิดข้อมูล NCHAR และขนาดสูงสุด 10
  • ความยาวขึ้นอยู่กับจำนวนไบต์ต่ออักขระที่กำหนดไว้ในชุดอักขระ
นาวาร์ชาร์2 ชนิดข้อมูลนี้เหมือนกับ VARCHAR2 แต่ชุดอักขระเป็นชุดอักขระประจำชาติ

  • ชุดอักขระนี้สามารถกำหนดได้สำหรับเซสชันโดยใช้ NLS_PARAMETERS
  • ชุดอักขระอาจเป็น UTF16 หรือ UTF8 ก็ได้
  • ข้อจำกัดด้านขนาดคือ 1-4000 ไบต์
Native_var NVARCHAR2(10):= 'guru99';

คำอธิบายไวยากรณ์:

  • คำสั่งนี้ประกาศตัวแปร 'Native_var' ที่มีชนิดข้อมูล NVARCHAR2 และขนาดสูงสุด 10
ยาวและยาว ประเภทข้อมูลนี้ใช้สำหรับจัดเก็บข้อความขนาดใหญ่หรือข้อมูลดิบที่มีขนาดสูงสุด 2 GB

  • สิ่งเหล่านี้ส่วนใหญ่จะใช้ในพจนานุกรมข้อมูล
  • LONG เก็บข้อมูลชุดอักขระ ในขณะที่ LONG RAW เก็บข้อมูลในรูปแบบไบนารี
  • LONG RAW รองรับไฟล์มีเดียและรูปภาพ ในขณะที่ LONG ทำงานได้เฉพาะกับข้อมูลที่สามารถจัดเก็บได้โดยใช้ชุดอักขระเท่านั้น
Large_text LONG;
Large_raw LONG RAW;

คำอธิบายไวยากรณ์:

  • คำสั่งนี้ประกาศตัวแปร 'Large_text' เป็นชนิดข้อมูล LONG และตัวแปร 'Large_raw' เป็นชนิดข้อมูล LONG RAW

หมายเหตุ ไม่แนะนำให้ใช้ชนิดข้อมูล LONG Oracleควรเลือกใช้ชนิดข้อมูล LOB แทน

ประเภทข้อมูล PL/SQL NUMBER

ชนิดข้อมูลนี้ใช้เก็บตัวเลขทศนิยมหรือตัวเลขคงที่ที่มีความแม่นยำสูงสุด 38 หลัก ใช้สำหรับทำงานกับฟิลด์ที่มีเฉพาะข้อมูลตัวเลขเท่านั้น สามารถประกาศตัวแปรได้ทั้งแบบระบุความแม่นยำและจำนวนหลักทศนิยม หรือไม่ระบุก็ได้ ไม่จำเป็นต้องใส่เครื่องหมายคำพูดเมื่อกำหนดค่าให้กับตัวแปร

A NUMBER(8,2);
B NUMBER(8);
C NUMBER;

คำอธิบายไวยากรณ์:

  • การประกาศครั้งแรกเป็นการประกาศตัวแปร 'A' ซึ่งเป็นชนิดข้อมูลตัวเลข โดยมีความแม่นยำโดยรวม 8 ตำแหน่ง และทศนิยม 2 ตำแหน่ง
  • ส่วนที่สองประกาศตัวแปร 'B' ซึ่งเป็นชนิดข้อมูลตัวเลขที่มีความแม่นยำสูงสุด 8 หลัก และไม่มีทศนิยม
  • แบบที่สามเป็นแบบทั่วไปที่สุด โดยประกาศชนิดข้อมูลตัวเลขเป็น 'C' โดยไม่มีข้อจำกัดเรื่องความแม่นยำหรือจำนวนทศนิยม สามารถรับค่าได้สูงสุดถึง 38 หลัก

ประเภทข้อมูล PL/SQL BOOLEAN

ชนิดข้อมูลนี้เก็บค่าตรรกะ Oracle ชนิดข้อมูลบูลีน (Boolean) แทนค่าจริง (TRUE) หรือเท็จ (FALSE) และใช้เป็นหลักในคำสั่งเงื่อนไข ไม่จำเป็นต้องใส่เครื่องหมายคำพูดเมื่อกำหนดค่าให้กับชนิดข้อมูลนี้

Var1 BOOLEAN;

คำอธิบายไวยากรณ์:

  • ตัวแปร 'Var1' ถูกประกาศเป็นชนิดข้อมูล BOOLEAN ผลลัพธ์จะเป็นจริงหรือเท็จขึ้นอยู่กับเงื่อนไขที่ตั้งไว้

ประเภทข้อมูล PL/SQL DATE

ชนิดข้อมูลนี้เก็บค่าในรูปแบบวันที่ ได้แก่ วัน เดือน และปี เมื่อใดก็ตามที่กำหนดตัวแปรด้วยชนิดข้อมูล DATE ตัวแปรนั้นจะสามารถเก็บข้อมูลเวลาได้ โดยค่าเริ่มต้นจะตั้งเป็น 12:00:00 หากไม่ได้ระบุไว้ ค่าที่กำหนดค่าจะต้องอยู่ในเครื่องหมายอัญประกาศ

มาตรฐาน Oracle รูปแบบเวลาสำหรับการรับเข้าและส่งออกคือ 'วัน-จันทร์-ปี' ซึ่งตั้งค่าไว้ใน NLS_PARAMETERS (NLS_DATE_FORMAT) ที่ระดับเซสชัน

newyear DATE:= '01-JAN-2015';
current_date DATE:= SYSDATE;

คำอธิบายไวยากรณ์:

  • ตัวแปร 'newyear' ถูกประกาศเป็นชนิดข้อมูล DATE และกำหนดค่าเป็น 1 มกราคม 2015
  • การประกาศครั้งที่สองประกาศตัวแปร 'current_date' เป็นชนิดข้อมูล DATE และกำหนดค่าเป็นวันที่ปัจจุบันของระบบ
  • ตัวแปรทั้งสองตัวมีข้อมูลเกี่ยวกับเวลา

ชนิดข้อมูล PL/SQL LOB

ประเภทข้อมูลนี้ส่วนใหญ่ใช้สำหรับจัดเก็บและประมวลผลข้อมูลขนาดใหญ่ที่ไม่มีโครงสร้าง เช่น รูปภาพและไฟล์มัลติมีเดีย Oracle นิยมใช้ชนิดข้อมูล LOB มากกว่า LONG เนื่องจากมีความยืดหยุ่นมากกว่า ข้อดีหลักของ LOB เมื่อเทียบกับ LONG คือ:

  • ตารางจำกัดให้มีคอลัมน์ประเภท LONG ได้เพียงคอลัมน์เดียว ในขณะที่ไม่มีข้อจำกัดเกี่ยวกับจำนวนคอลัมน์ประเภท LOB
  • เครื่องมือเชื่อมต่อข้อมูลยอมรับ LOB ในระหว่างการจำลองข้อมูล แต่จะละเว้นคอลัมน์ LONG ซึ่งต้องจำลองข้อมูลด้วยตนเอง
  • คอลัมน์แบบ LONG สามารถจัดเก็บข้อมูลได้สูงสุด 2 GB ในขณะที่ LOB สามารถจัดเก็บข้อมูลได้สูงสุด 128 TB
  • Oracle มีการปรับปรุงประเภทข้อมูล LOB อย่างต่อเนื่องในแต่ละเวอร์ชัน ในขณะที่ประเภทข้อมูล LONG แทบไม่มีการเปลี่ยนแปลง

ดังนั้นจึงควรใช้ชนิดข้อมูล LOB แทน LONG เสมอ ชนิดข้อมูล LOB ต่างๆ ด้านล่างนี้สามารถจัดเก็บข้อมูลได้สูงสุดถึง 128 เทราไบต์:

  1. หยด
  2. CLOB และ NCLOB
  3. บีไฟล์
ประเภทข้อมูล Descriptไอออน วากยสัมพันธ์
หยด ชนิดข้อมูลนี้จัดเก็บข้อมูล LOB ในรูปแบบไฟล์ไบนารีได้สูงสุดถึง 128 TB โดยไม่จัดเก็บข้อมูลตามรายละเอียดของชุดอักขระ ดังนั้นจึงสามารถจัดเก็บข้อมูลที่ไม่เป็นระเบียบ เช่น วัตถุมัลติมีเดียและรูปภาพได้
Binary_data BLOB;

คำอธิบายไวยากรณ์:

  • ตัวแปร 'Binary_data' ถูกประกาศเป็นชนิด BLOB
CLOB และ NCLOB CLOB จัดเก็บข้อมูล LOB ในชุดอักขระ ในขณะที่ NCLOB จัดเก็บข้อมูลในชุดอักขระดั้งเดิม เนื่องจากใช้การจัดเก็บข้อมูลแบบอิงตามชุดอักขระ จึงไม่สามารถจัดเก็บข้อมูลประเภทมัลติมีเดียหรือรูปภาพได้ ขนาดสูงสุดคือ 128 TB
Charac_data CLOB;

คำอธิบายไวยากรณ์:

  • ตัวแปร 'Charac_data' ถูกประกาศเป็นชนิดข้อมูล CLOB
บีไฟล์
  • BFILE จัดเก็บข้อมูลไบนารีที่ไม่มีโครงสร้างไว้ภายนอกฐานข้อมูลในรูปแบบไฟล์ของระบบปฏิบัติการ
  • ขนาดของไฟล์ BFILE ถูกจำกัดโดยระบบปฏิบัติการ และไฟล์เหล่านี้เป็นแบบอ่านอย่างเดียว ไม่สามารถแก้ไขได้

คำถามที่พบบ่อย

CHAR เป็นชนิดข้อมูลความยาวคงที่และจะเติมช่องว่างเพื่อให้ได้ขนาดตามที่กำหนด ซึ่งจะทำให้สิ้นเปลืองพื้นที่สำหรับค่าที่สั้น ส่วน VARCHAR2 เป็นชนิดข้อมูลความยาวแปรผันและเก็บเฉพาะอักขระจริงเท่านั้น จึงนิยมใช้สำหรับคอลัมน์สตริงส่วนใหญ่

LOB อนุญาตให้มีคอลัมน์จำนวนมากต่อตาราง จัดเก็บข้อมูลได้สูงสุด 128 TB และมีการปรับปรุงอย่างต่อเนื่องในแต่ละเวอร์ชัน ส่วน LONG นั้นจำกัดอยู่ที่หนึ่งคอลัมน์ ความจุสูงสุด 2 GB และยังคงใช้เพื่อความเข้ากันได้กับเวอร์ชันเก่าเป็นหลัก

ในเวอร์ชันเก่าๆ ไม่มี ชนิดข้อมูล BOOLEAN เป็นชนิดข้อมูลเฉพาะของ PL/SQL ดังนั้นคอลัมน์ในตารางจึงใช้แฟล็ก NUMBER หรือ CHAR แทน โดยจะใช้โดยตรงภายในบล็อกสำหรับตรรกะแบบมีเงื่อนไข

ใช่แล้ว ด้วยการวิเคราะห์ค่าตัวอย่างในด้านความยาว ช่วง และรูปแบบ AI สามารถแนะนำประเภทข้อมูล VARCHAR2, NUMBER, DATE หรือ LOB และแจ้งเตือนคอลัมน์ที่มีขนาดใหญ่เกินไปได้ ตรวจสอบความถูกต้องของการเลือกใช้ข้อมูลกับข้อมูลในอนาคตอีกครั้ง

ใช่แล้ว ตัวแปร DATE จะเก็บค่าศตวรรษ ปี เดือน วัน ชั่วโมง นาที และวินาที หากไม่ได้ระบุเวลา ระบบจะตั้งค่าเริ่มต้นเป็นเที่ยงคืน สำหรับค่าเศษส่วนของวินาทีหรือเขตเวลา ให้ใช้ TIMESTAMP แทน

สรุปโพสต์นี้ด้วย: