Oracle ประเภทระเบียน PL/SQL พร้อมตัวอย่าง

ประเภทบันทึกคืออะไร?

ประเภทเรกคอร์ดเป็นประเภทข้อมูลที่ซับซ้อนซึ่งช่วยให้โปรแกรมเมอร์สามารถสร้างประเภทข้อมูลใหม่โดยมีโครงสร้างคอลัมน์ตามต้องการได้

  • โดยจะจัดกลุ่มคอลัมน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไปเพื่อสร้างชนิดข้อมูลใหม่
  • คอลัมน์เหล่านี้จะมีชื่อและประเภทข้อมูลเป็นของตัวเอง
  • ประเภทเรคคอร์ดสามารถรับข้อมูลได้
    • เป็นระเบียนเดียวที่ประกอบด้วยหลายคอลัมน์หรือ
    • สามารถยอมรับค่าสำหรับคอลัมน์ใดคอลัมน์หนึ่งของเรกคอร์ดได้
  • ประเภทเรกคอร์ดหมายถึงประเภทข้อมูลใหม่ เมื่อสร้างประเภทบันทึกแล้ว มันจะถูกจัดเก็บเป็นประเภทข้อมูลใหม่ในฐานข้อมูล และจะใช้ประเภทเดียวกันในการประกาศตัวแปรในโปรแกรม
  • โดยจะใช้คำสำคัญ 'พิมพ์' เพื่อสั่งให้คอมไพลเลอร์กำลังสร้างชนิดข้อมูลใหม่
  • สามารถสร้างขึ้นได้ที่ “ระดับฐานข้อมูล” ซึ่งสามารถจัดเก็บเป็นวัตถุฐานข้อมูล ใช้ทั่วฐานข้อมูล หรือสร้างได้ที่ “ระดับโปรแกรมย่อย”ซึ่งมองเห็นได้เฉพาะภายในโปรแกรมย่อยเท่านั้น
  • สามารถประกาศประเภทเรกคอร์ดในระดับฐานข้อมูลให้กับคอลัมน์ของตารางได้เช่นกัน เพื่อให้คอลัมน์เดียวสามารถเก็บข้อมูลที่ซับซ้อนได้
  • สามารถเข้าถึงข้อมูลในประเภทข้อมูลเหล่านี้ได้โดยอ้างอิงถึง variable_name ตามด้วยตัวดำเนินการจุด (.) ตามด้วย column_name เช่น ' - -

ไวยากรณ์สำหรับการประกาศในระดับฐานข้อมูล:

Oracle ประเภทระเบียน PL/SQL

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

ในรูปแบบแรก เราจะเห็นคีย์เวิร์ด 'CREATE TYPE' ซึ่งจะสั่งให้คอมไพเลอร์สร้างประเภทเรคคอร์ดชื่อ "type_name_db" โดยมีคอลัมน์ที่ระบุเป็นวัตถุฐานข้อมูล

นี่เป็นคำสั่งเฉพาะและไม่อยู่ในบล็อกใดๆ

ไวยากรณ์สำหรับการประกาศในระดับโปรแกรมย่อย:

Oracle ประเภทระเบียน PL/SQL

DECLARE
TYPE <type_name> IS RECORD
(
<columnl> <datatype>,
);
BEGIN
<execution_section>;
END;

ในรูปแบบไวยากรณ์ เรากำลังสร้างประเภทบันทึกชื่อ "type_name" ภายในโปรแกรมย่อยเท่านั้น

ในวิธีการประกาศทั้งสองวิธี วิธีการกำหนดคอลัมน์และประเภทข้อมูลจะคล้ายกัน

ตัวอย่างที่ 1: ประเภท RECORD เป็นวัตถุฐานข้อมูล

ในโปรแกรมนี้ เราจะมาดูวิธีการสร้าง “ประเภทบันทึก” เป็นวัตถุฐานข้อมูล เราจะสร้างประเภทบันทึก 'emp_det' ด้วยสี่คอลัมน์ คอลัมน์และประเภทข้อมูลมีดังนี้:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • ผู้จัดการ (หมายเลข)
  • เงินเดือน (จำนวน)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER 
);
/

Output:

Type created

คำอธิบายรหัส:

  • รหัสข้างต้นจะสร้างประเภท emp_det เป็นวัตถุฐานข้อมูล
  • โดยจะมี 4 คอลัมน์ emp_no, emp_name, manager และเงินเดือนตามที่กำหนด
  • ตอนนี้ 'emp_det' ก็คล้ายกับอย่างอื่น ประเภทข้อมูล (เช่น NUMBER, VARCHAR@ ฯลฯ) และสามารถมองเห็นได้ในฐานข้อมูลทั้งหมด ดังนั้นจึงสามารถใช้ในฐานข้อมูลทั้งหมดเพื่อประกาศตัวแปรประเภทนี้

Output:

สร้างประเภท 'emp_det' เป็นประเภทบันทึกในระดับฐานข้อมูล

ตัวอย่างที่ 2: ประเภทเรคคอร์ดในระดับโปรแกรมย่อย - การเข้าถึงระดับคอลัมน์

ในตัวอย่างนี้ เราจะดูวิธีการสร้างประเภทเรคคอร์ดในระดับโปรแกรมย่อย และวิธีการเติมและดึงค่าจากประเภทเรคคอร์ดตามระดับคอลัมน์

เรากำลังจะสร้าง 'emp_det' record_type ในระดับโปรแกรมย่อย และเราจะใช้สิ่งเดียวกันเพื่อเติมและแสดงข้อมูลจากมัน

Oracle ประเภทระเบียน PL/SQL

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER, 
EMP_NAME VARCHAR2(150),
MANAGER NUMBER, 
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
guru99_emp_rec.emp_no:= 1001;	
guru99_emp_rec.emp_name:=:'XXX';	
guru99_emp_rec.manager:= 1000;	
guru99_emp_rec.salary:=10000;	
dbms_output.put.line('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); 
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

Output:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000 
Employee Manager Number: 1000

คำอธิบายรหัส:

  • รหัสบรรทัด 2-8: ประเภทบันทึก 'emp_det' ถูกประกาศด้วยคอลัมน์ emp_no, emp_name, เงินเดือน และผู้จัดการประเภทข้อมูล NUMBER, VARCHAR2, NUMBER, NUMBER
  • รหัสบรรทัด 9: ตัวแปร guru99_emp_rec ได้รับการประกาศเป็นประเภทข้อมูล 'emp_det' ตอนนี้นี้ ตัวแปร สามารถเก็บค่าที่มี 4 ฟิลด์/คอลัมน์ด้านบนทั้งหมดได้
  • รหัสบรรทัด 11: กำลังเติมข้อมูลในช่อง 'emp_no' ของ 'guru99_emp_rec' ด้วยค่า 1001
  • รหัสบรรทัด 12: กำลังเติมข้อมูลในช่อง "emp_name" ของ "guru99_emp_rec" ด้วยค่า XXX
  • รหัสบรรทัด 13: กำลังเติมข้อมูลในช่อง "ผู้จัดการ" ของ "guru99_emp_rec" ด้วยค่า 1000
  • รหัสบรรทัด 14: กำลังเติมข้อมูลในช่อง "เงินเดือน" ของ "guru99_emp_rec" ด้วยค่า 10000
  • รหัสบรรทัด 15-19: การแสดงค่าของ 'guru99_emp_rec' ในเอาต์พุต

ตัวอย่างที่ 3: ประเภทเรคคอร์ดที่ระดับโปรแกรมย่อย-การเข้าถึงระดับแถว

ในตัวอย่างนี้ เราจะดูวิธีการสร้างประเภทเรคคอร์ดในระดับโปรแกรมย่อย และวิธีการเติมข้อมูลให้เป็นระดับแถว เรากำลังจะสร้าง 'emp_det' record_type ในระดับโปรแกรมย่อย และเราจะใช้สิ่งเดียวกันเพื่อเติมและแสดงข้อมูลจากมัน

Oracle ประเภทระเบียน PL/SQL

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME YARCHAR2( 150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);
COMMIT;
SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002;
dbms_output.put_line (‘Employee Detail’);
dbms_output.put_line (‘Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line (‘Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line (‘Employee Salary: '||guru99_emp_rec. salary); 
dbms_output.put_line (‘Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

คำอธิบายรหัส:

  • รหัสบรรทัด 2-8: ประเภทบันทึก 'emp_det' ถูกประกาศด้วยคอลัมน์ emp_no, emp_name, เงินเดือน และผู้จัดการประเภทข้อมูล NUMBER, VARCHAR2, NUMBER, NUMBER
  • รหัสบรรทัด 9: ตัวแปร guru99_emp_rec ได้รับการประกาศเป็นประเภทข้อมูล 'emp_det' ตอนนี้ตัวแปรนี้สามารถเก็บค่าที่มี 4 ฟิลด์/คอลัมน์ข้างต้นทั้งหมดได้
  • รหัสบรรทัด 11: การเติมข้อมูล emp ตารางด้วยข้อมูล 1002 เป็น emp_no, YYY เป็น emp_name, 15000 เป็นเงินเดือน และ 1000 เป็นหมายเลขผู้จัดการ
  • รหัสบรรทัด 12: ยืนยันธุรกรรมการแทรกข้างต้น
  • รหัสบรรทัด 13: การเติมตัวแปร 'guru99_emp_rec' เป็นข้อมูลระดับแถวจากการสืบค้นแบบเลือกสำหรับพนักงานหมายเลข 1002
  • รหัสบรรทัด 15-19: การแสดงค่าของ 'guru99_emp_rec' ในเอาต์พุต

Output:

Employee Detail 
Employee Number: 1002 
Employee Name: YYY 
Employee Salary: 1000 
Employee Manager Number: 15000

หมายเหตุ ประเภทเรคคอร์ดสามารถเข้าถึงได้เฉพาะในระดับคอลัมน์ในขณะที่เปลี่ยนเส้นทางค่าไปยังโหมดเอาต์พุตใดๆ