PL / SQL - Bản ghi
Trong chương này, chúng ta sẽ thảo luận về Bản ghi trong PL / SQL. Arecordlà một cấu trúc dữ liệu có thể chứa các mục dữ liệu khác nhau. Bản ghi bao gồm các trường khác nhau, tương tự như một hàng của bảng cơ sở dữ liệu.
Ví dụ: bạn muốn theo dõi sách của mình trong thư viện. Bạn có thể muốn theo dõi các thuộc tính sau của từng cuốn sách, chẳng hạn như Tên sách, Tác giả, Chủ đề, ID sách. Bản ghi chứa một trường cho mỗi mục này cho phép coi SÁCH như một đơn vị logic và cho phép bạn tổ chức và trình bày thông tin của nó theo cách tốt hơn.
PL / SQL có thể xử lý các loại bản ghi sau:
- Table-based
- Bản ghi dựa trên con trỏ
- Bản ghi do người dùng xác định
Bản ghi dựa trên bảng
Thuộc tính% ROWTYPE cho phép lập trình viên tạo table-based và cursorbased Hồ sơ.
Ví dụ sau minh họa khái niệm table-basedHồ sơ. Chúng tôi sẽ sử dụng bảng KHÁCH HÀNG mà chúng tôi đã tạo và sử dụng trong các chương trước -
DECLARE
customer_rec customers%rowtype;
BEGIN
SELECT * into customer_rec
FROM customers
WHERE id = 5;
dbms_output.put_line('Customer ID: ' || customer_rec.id);
dbms_output.put_line('Customer Name: ' || customer_rec.name);
dbms_output.put_line('Customer Address: ' || customer_rec.address);
dbms_output.put_line('Customer Salary: ' || customer_rec.salary);
END;
/
Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:
Customer ID: 5
Customer Name: Hardik
Customer Address: Bhopal
Customer Salary: 9000
PL/SQL procedure successfully completed.
Bản ghi dựa trên con trỏ
Ví dụ sau minh họa khái niệm cursor-basedHồ sơ. Chúng tôi sẽ sử dụng bảng KHÁCH HÀNG mà chúng tôi đã tạo và sử dụng trong các chương trước -
DECLARE
CURSOR customer_cur is
SELECT id, name, address
FROM customers;
customer_rec customer_cur%rowtype;
BEGIN
OPEN customer_cur;
LOOP
FETCH customer_cur into customer_rec;
EXIT WHEN customer_cur%notfound;
DBMS_OUTPUT.put_line(customer_rec.id || ' ' || customer_rec.name);
END LOOP;
END;
/
Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:
1 Ramesh
2 Khilan
3 kaushik
4 Chaitali
5 Hardik
6 Komal
PL/SQL procedure successfully completed.
Bản ghi do người dùng xác định
PL / SQL cung cấp kiểu bản ghi do người dùng định nghĩa cho phép bạn xác định các cấu trúc bản ghi khác nhau. Các bản ghi này bao gồm các trường khác nhau. Giả sử bạn muốn theo dõi sách của mình trong thư viện. Bạn có thể muốn theo dõi các thuộc tính sau về mỗi cuốn sách -
- Title
- Author
- Subject
- ID sách
Xác định bản ghi
Loại bản ghi được định nghĩa là -
TYPE
type_name IS RECORD
( field_name1 datatype1 [NOT NULL] [:= DEFAULT EXPRESSION],
field_name2 datatype2 [NOT NULL] [:= DEFAULT EXPRESSION],
...
field_nameN datatypeN [NOT NULL] [:= DEFAULT EXPRESSION);
record-name type_name;
Bản ghi Sách được khai báo theo cách sau:
DECLARE
TYPE books IS RECORD
(title varchar(50),
author varchar(50),
subject varchar(100),
book_id number);
book1 books;
book2 books;
Truy cập các trường
Để truy cập bất kỳ trường nào của bản ghi, chúng tôi sử dụng dấu chấm (.)nhà điều hành. Toán tử truy cập thành viên được mã hóa là khoảng thời gian giữa tên biến bản ghi và trường mà chúng ta muốn truy cập. Sau đây là một ví dụ để giải thích việc sử dụng bản ghi:
DECLARE
type books is record
(title varchar(50),
author varchar(50),
subject varchar(100),
book_id number);
book1 books;
book2 books;
BEGIN
-- Book 1 specification
book1.title := 'C Programming';
book1.author := 'Nuha Ali ';
book1.subject := 'C Programming Tutorial';
book1.book_id := 6495407;
-- Book 2 specification
book2.title := 'Telecom Billing';
book2.author := 'Zara Ali';
book2.subject := 'Telecom Billing Tutorial';
book2.book_id := 6495700;
-- Print book 1 record
dbms_output.put_line('Book 1 title : '|| book1.title);
dbms_output.put_line('Book 1 author : '|| book1.author);
dbms_output.put_line('Book 1 subject : '|| book1.subject);
dbms_output.put_line('Book 1 book_id : ' || book1.book_id);
-- Print book 2 record
dbms_output.put_line('Book 2 title : '|| book2.title);
dbms_output.put_line('Book 2 author : '|| book2.author);
dbms_output.put_line('Book 2 subject : '|| book2.subject);
dbms_output.put_line('Book 2 book_id : '|| book2.book_id);
END;
/
Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
PL/SQL procedure successfully completed.
Ghi lại dưới dạng tham số chương trình con
Bạn có thể truyền một bản ghi làm tham số chương trình con giống như bạn truyền bất kỳ biến nào khác. Bạn cũng có thể truy cập các trường bản ghi theo cách giống như cách bạn truy cập trong ví dụ trên -
DECLARE
type books is record
(title varchar(50),
author varchar(50),
subject varchar(100),
book_id number);
book1 books;
book2 books;
PROCEDURE printbook (book books) IS
BEGIN
dbms_output.put_line ('Book title : ' || book.title);
dbms_output.put_line('Book author : ' || book.author);
dbms_output.put_line( 'Book subject : ' || book.subject);
dbms_output.put_line( 'Book book_id : ' || book.book_id);
END;
BEGIN
-- Book 1 specification
book1.title := 'C Programming';
book1.author := 'Nuha Ali ';
book1.subject := 'C Programming Tutorial';
book1.book_id := 6495407;
-- Book 2 specification
book2.title := 'Telecom Billing';
book2.author := 'Zara Ali';
book2.subject := 'Telecom Billing Tutorial';
book2.book_id := 6495700;
-- Use procedure to print book info
printbook(book1);
printbook(book2);
END;
/
Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:
Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700
PL/SQL procedure successfully completed.