Oracle Loại bản ghi PL/SQL kèm ví dụ
Loại bản ghi là gì?
Kiểu bản ghi là kiểu dữ liệu phức tạp cho phép lập trình viên tạo kiểu dữ liệu mới với cấu trúc cột mong muốn.
- Nó nhóm một hoặc nhiều cột để tạo thành một kiểu dữ liệu mới
- Các cột này sẽ có tên và kiểu dữ liệu riêng
- Loại bản ghi có thể chấp nhận dữ liệu
- Là một bản ghi bao gồm nhiều cột HOẶC
- Nó có thể chấp nhận giá trị cho một cột cụ thể của bản ghi
- Loại bản ghi đơn giản có nghĩa là một loại dữ liệu mới. Khi loại bản ghi được tạo, nó sẽ được lưu trữ dưới dạng loại dữ liệu mới trong cơ sở dữ liệu và loại dữ liệu tương tự sẽ được sử dụng để khai báo một biến trong chương trình.
- Nó sẽ sử dụng từ khóa 'KIỂU' để hướng dẫn trình biên dịch rằng nó đang tạo kiểu dữ liệu mới.
- Nó có thể được tạo tại “cấp độ cơ sở dữ liệu” có thể được lưu trữ dưới dạng đối tượng cơ sở dữ liệu, được sử dụng trên toàn bộ cơ sở dữ liệu hoặc nó có thể được tạo tại “cấp độ chương trình con”, chỉ hiển thị bên trong các chương trình con.
- Kiểu bản ghi ở cấp độ cơ sở dữ liệu cũng có thể được khai báo cho các cột của bảng để một cột có thể chứa dữ liệu phức tạp.
- Dữ liệu trong các kiểu dữ liệu này có thể được truy cập bằng cách tham chiếu đến tên biến của chúng, theo sau là toán tử dấu chấm (.), theo sau là tên cột, tức là ' . '
Cú pháp khai báo ở cấp độ cơ sở dữ liệu:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Trong cú pháp đầu tiên, chúng ta có thể thấy từ khóa 'CREATE TYPE', từ khóa này hướng dẫn trình biên dịch tạo loại bản ghi có tên “type_name_db” với cột được chỉ định làm đối tượng cơ sở dữ liệu.
Điều này được đưa ra dưới dạng một tuyên bố riêng lẻ và không nằm trong bất kỳ khối nào.
Cú pháp khai báo ở cấp độ chương trình con:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
Theo cú pháp, chúng ta chỉ tạo loại bản ghi có tên “type_name” bên trong chương trình con.
Trong cả hai phương thức khai báo, cách xác định cột và kiểu dữ liệu đều giống nhau.
Ví dụ 1: Loại GHI làm đối tượng cơ sở dữ liệu
Trong chương trình này, chúng ta sẽ xem cách tạo “Loại bản ghi” làm đối tượng cơ sở dữ liệu. Chúng tôi sẽ tạo loại bản ghi 'emp_det' với bốn cột. Các cột và kiểu dữ liệu của chúng như sau:
- EMP_NO (SỐ)
- EMP_NAME (VARCHAR2 (150))
- NGƯỜI QUẢN LÝ (SỐ)
- LƯƠNG (SỐ LƯỢNG)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Đầu ra:
Type created
Giải thích mã:
- Đoạn mã trên sẽ tạo kiểu emp_det làm đối tượng cơ sở dữ liệu.
- Nó sẽ có 4 cột emp_no, emp_name, manager và lương như đã định nghĩa.
- Bây giờ 'emp_det' tương tự như cái khác loại dữ liệu (như NUMBER, VARCHAR@, v.v.) Và nó hiển thị trong toàn bộ cơ sở dữ liệu. Do đó, điều này có thể được sử dụng trong toàn bộ cơ sở dữ liệu để khai báo biến loại này.
Đầu ra:
Đã tạo loại 'emp_det' làm loại bản ghi ở cấp cơ sở dữ liệu.
Ví dụ 2: Loại bản ghi ở cấp chương trình con- Truy cập cấp cột
Trong ví dụ này, chúng ta sẽ xem cách tạo loại bản ghi ở cấp chương trình con cũng như cách điền và tìm nạp các giá trị từ nó theo cấp độ cột.
Chúng ta sẽ tạo 'emp_det' record_type ở cấp chương trình con và chúng ta sẽ sử dụng cách tương tự để điền và hiển thị dữ liệu từ nó.
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; /
Đầu ra:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Giải thích mã:
- Dòng mã 2-8: Loại bản ghi 'emp_det' được khai báo với các cột emp_no, emp_name, lương và người quản lý loại dữ liệu NUMBER, VARCHAR2, NUMBER, NUMBER.
- Dòng mã 9: Biến guru99_emp_rec được khai báo là kiểu dữ liệu 'emp_det'. Bây giờ điều này biến có thể giữ giá trị chứa tất cả 4 trường/cột trên.
- Dòng mã 11: Điền vào trường 'emp_no' của 'guru99_emp_rec' với giá trị 1001.
- Dòng mã 12: Điền vào trường 'emp_name' của 'guru99_emp_rec' với giá trị XXX.
- Dòng mã 13: Điền vào trường 'người quản lý' của 'guru99_emp_rec' với giá trị 1000.
- Dòng mã 14: Điền vào trường 'lương' của 'guru99_emp_rec' với giá trị 10000.
- Dòng mã 15-19: Hiển thị giá trị của 'guru99_emp_rec' trong đầu ra.
Ví dụ 3: Loại bản ghi ở cấp chương trình con-Truy cập cấp hàng
Trong ví dụ này, chúng ta sẽ xem cách tạo loại bản ghi ở cấp chương trình con và cách điền nó ở cấp hàng. Chúng ta sẽ tạo 'emp_det' record_type ở cấp chương trình con và chúng ta sẽ sử dụng cách tương tự để điền và hiển thị dữ liệu từ nó.
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; /
Giải thích mã:
- Dòng mã 2-8: Loại bản ghi 'emp_det' được khai báo với các cột emp_no, emp_name, lương và người quản lý loại dữ liệu NUMBER, VARCHAR2, NUMBER, NUMBER.
- Dòng mã 9: Biến guru99_emp_rec được khai báo là kiểu dữ liệu 'emp_det'. Bây giờ biến này có thể giữ giá trị chứa tất cả 4 trường/cột trên.
- Dòng mã 11: Điền vào bảng emp với dữ liệu 1002 là emp_no, YYY là emp_name, 15000 là lương và 1000 là mã số người quản lý.
- Dòng mã 12: Cam kết giao dịch chèn ở trên.
- Dòng mã 13: Điền biến 'guru99_emp_rec' làm dữ liệu cấp hàng từ truy vấn chọn cho mã số nhân viên 1002.
- Dòng mã 15-19: Hiển thị giá trị của 'guru99_emp_rec' trong đầu ra.
Đầu ra:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Lưu ý: Loại bản ghi chỉ có thể được truy cập ở cấp độ cột trong khi chuyển hướng giá trị của nó sang bất kỳ chế độ đầu ra nào.