Trong chương này, chúng ta sẽ thảo luận về các con trỏ trong PL/SQL. Oracle tạo một vùng bộ nhớ, được gọi là vùng ngữ cảnh, để xử lý một câu lệnh SQL, vùng này chứa tất cả thông tin cần thiết để xử lý câu lệnh; ví dụ: số lượng hàng được xử lý, v.v.
Con trỏ là một con trỏ đến vùng ngữ cảnh này. PL/SQL điều khiển vùng ngữ cảnh thông qua một con trỏ. Một con trỏ giữ các hàng (một hoặc nhiều) được trả về bởi một câu lệnh SQL. Tập hợp các hàng mà con trỏ giữ được gọi là tập hoạt động .
Bạn có thể đặt tên cho một con trỏ để nó có thể được tham chiếu đến trong một chương trình để tìm nạp và xử lý các hàng được trả về bởi câu lệnh SQL, từng hàng một. Có hai loại con trỏ -
Con trỏ ngầm
Con trỏ tục tĩu
Con trỏ ngầm
Các con trỏ ngầm được Oracle tự động tạo bất cứ khi nào một câu lệnh SQL được thực thi, khi không có con trỏ rõ ràng cho câu lệnh. Người lập trình không thể kiểm soát các con trỏ ngầm và thông tin trong đó.
Bất cứ khi nào một câu lệnh DML (INSERT, UPDATE và DELETE) được đưa ra, một con trỏ ngầm được liên kết với câu lệnh này. Đối với các thao tác INSERT, con trỏ giữ dữ liệu cần được chèn vào. Đối với các hoạt động UPDATE và DELETE, con trỏ xác định các hàng sẽ bị ảnh hưởng.
Trong PL/SQL, bạn có thể tham khảo con trỏ ngầm gần đây nhất là con trỏ SQL , con trỏ này luôn có các thuộc tính như % FOUND,% ISOPEN,% NOTFOUND và % ROWCOUNT . Con trỏ SQL có các thuộc tính bổ sung, % BULK_ROWCOUNT và % BULK_EXCEPTIONS , được thiết kế để sử dụng với câu lệnh FORALL . Bảng sau cung cấp mô tả về các thuộc tính được sử dụng nhiều nhất:
Bất kỳ thuộc tính con trỏ SQL nào sẽ được truy cập dưới dạng sql% thuộc tính_name như được hiển thị bên dưới trong ví dụ.
Thí dụ
Chúng ta sẽ sử dụng bảng CUSTOMERS mà chúng ta đã tạo và sử dụng trong các chương trước.
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
Chương trình sau sẽ cập nhật bảng và tăng lương của mỗi khách hàng thêm 500 và sử dụng thuộc tính ROWCOUNT SQL% để xác định số hàng bị ảnh hưởng -
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
SET salary = salary + 500;
IF sql%notfound THEN
dbms_output.put_line('no customers selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' customers selected ');
END IF;
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:
6 customers selected
PL/SQL procedure successfully completed.
Nếu bạn kiểm tra các bản ghi trong bảng khách hàng, bạn sẽ thấy rằng các hàng đã được cập nhật -
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2500.00 |
| 2 | Khilan | 25 | Delhi | 2000.00 |
| 3 | kaushik | 23 | Kota | 2500.00 |
| 4 | Chaitali | 25 | Mumbai | 7000.00 |
| 5 | Hardik | 27 | Bhopal | 9000.00 |
| 6 | Komal | 22 | MP | 5000.00 |
+----+----------+-----+-----------+----------+
Con trỏ rõ ràng
Con trỏ rõ ràng là con trỏ do người lập trình xác định để giành được nhiều quyền kiểm soát hơn đối với khu vực ngữ cảnh . Một con trỏ rõ ràng nên được định nghĩa trong phần khai báo của Khối PL/SQL. Nó được tạo trên Câu lệnh SELECT trả về nhiều hơn một hàng.
Cú pháp để tạo một con trỏ rõ ràng là:
CURSOR cursor_name IS select_statement;
Làm việc với một con trỏ rõ ràng bao gồm các bước sau:
Khai báo con trỏ để khởi tạo bộ nhớ
Mở con trỏ để cấp phát bộ nhớ
Tìm nạp con trỏ để truy xuất dữ liệu
Đóng con trỏ để giải phóng bộ nhớ được cấp phát
Khai báo con trỏ
Khai báo con trỏ xác định con trỏ với tên và câu lệnh SELECT liên quan. Ví dụ -
CURSOR c_customers IS
SELECT id, name, address FROM customers;
Mở con trỏ
Việc mở con trỏ sẽ phân bổ bộ nhớ cho con trỏ và làm cho nó sẵn sàng để tìm nạp các hàng được câu lệnh SQL trả về vào đó. Ví dụ, chúng ta sẽ mở con trỏ được xác định ở trên như sau:
OPEN c_customers;
Tìm nạp con trỏ
Tìm nạp con trỏ liên quan đến việc truy cập từng hàng một. Ví dụ: chúng tôi sẽ tìm nạp các hàng từ con trỏ đã mở ở trên như sau:
FETCH c_customers INTO c_id, c_name, c_addr;
Đóng con trỏ
Đóng con trỏ có nghĩa là giải phóng bộ nhớ được cấp phát. Ví dụ, chúng ta sẽ đóng con trỏ đã mở ở trên như sau:
CLOSE c_customers;
Thí dụ
Sau đây là một ví dụ đầy đủ để minh họa các khái niệm về con trỏ rõ ràng & minua;
DECLARE
c_id customers.id%type;
c_name customers.name%type;
c_addr customers.address%type;
CURSOR c_customers is
SELECT id, name, address FROM customers;
BEGIN
OPEN c_customers;
LOOP
FETCH c_customers into c_id, c_name, c_addr;
EXIT WHEN c_customers%notfound;
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
END LOOP;
CLOSE c_customers;
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 Ahmedabad
2 Khilan Delhi
3 kaushik Kota
4 Chaitali Mumbai
5 Hardik Bhopal
6 Komal MP
PL/SQL procedure successfully completed.
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
pl/sql, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty