Oracle ประเภทระเบียน PL/SQL พร้อมตัวอย่าง
ประเภทบันทึกคืออะไร?
ประเภทเรกคอร์ดเป็นประเภทข้อมูลที่ซับซ้อนซึ่งช่วยให้โปรแกรมเมอร์สามารถสร้างประเภทข้อมูลใหม่โดยมีโครงสร้างคอลัมน์ตามต้องการได้
- โดยจะจัดกลุ่มคอลัมน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไปเพื่อสร้างชนิดข้อมูลใหม่
- คอลัมน์เหล่านี้จะมีชื่อและประเภทข้อมูลเป็นของตัวเอง
- ประเภทเรคคอร์ดสามารถรับข้อมูลได้
- เป็นระเบียนเดียวที่ประกอบด้วยหลายคอลัมน์หรือ
- สามารถยอมรับค่าสำหรับคอลัมน์ใดคอลัมน์หนึ่งของเรกคอร์ดได้
- ประเภทเรกคอร์ดหมายถึงประเภทข้อมูลใหม่ เมื่อสร้างประเภทบันทึกแล้ว มันจะถูกจัดเก็บเป็นประเภทข้อมูลใหม่ในฐานข้อมูล และจะใช้ประเภทเดียวกันในการประกาศตัวแปรในโปรแกรม
- โดยจะใช้คำสำคัญ 'พิมพ์' เพื่อสั่งให้คอมไพลเลอร์กำลังสร้างชนิดข้อมูลใหม่
- สามารถสร้างขึ้นได้ที่ “ระดับฐานข้อมูล” ซึ่งสามารถจัดเก็บเป็นวัตถุฐานข้อมูล ใช้ทั่วฐานข้อมูล หรือสร้างได้ที่ “ระดับโปรแกรมย่อย”ซึ่งมองเห็นได้เฉพาะภายในโปรแกรมย่อยเท่านั้น
- สามารถประกาศประเภทเรกคอร์ดในระดับฐานข้อมูลให้กับคอลัมน์ของตารางได้เช่นกัน เพื่อให้คอลัมน์เดียวสามารถเก็บข้อมูลที่ซับซ้อนได้
- สามารถเข้าถึงข้อมูลในประเภทข้อมูลเหล่านี้ได้โดยอ้างอิงถึง variable_name ตามด้วยตัวดำเนินการจุด (.) ตามด้วย column_name เช่น ' - -
ไวยากรณ์สำหรับการประกาศในระดับฐานข้อมูล:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
ในรูปแบบแรก เราจะเห็นคีย์เวิร์ด 'CREATE TYPE' ซึ่งจะสั่งให้คอมไพเลอร์สร้างประเภทเรคคอร์ดชื่อ "type_name_db" โดยมีคอลัมน์ที่ระบุเป็นวัตถุฐานข้อมูล
นี่เป็นคำสั่งเฉพาะและไม่อยู่ในบล็อกใดๆ
ไวยากรณ์สำหรับการประกาศในระดับโปรแกรมย่อย:
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 ในระดับโปรแกรมย่อย และเราจะใช้สิ่งเดียวกันเพื่อเติมและแสดงข้อมูลจากมัน
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 ในระดับโปรแกรมย่อย และเราจะใช้สิ่งเดียวกันเพื่อเติมและแสดงข้อมูลจากมัน
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
หมายเหตุ ประเภทเรคคอร์ดสามารถเข้าถึงได้เฉพาะในระดับคอลัมน์ในขณะที่เปลี่ยนเส้นทางค่าไปยังโหมดเอาต์พุตใดๆ