Con trỏ trong oracle là gì
Oracle Sử dụng vùng làm việc được gọi là vùng SQL riêng để thực thi các câu lệnh SQL và lưu trữ thông tin. Con trỏ Oracle là một cấu trúc PL / SQL cho phép bạn đặt tên cho các vùng làm việc này và truy cập thông tin được lưu trữ của chúng
Các loại con trỏ trong Oracle
- Con trỏ ngầm trong Oracle
- Con trỏ rõ ràng trong Oracle
Con trỏ rõ ràng
Con trỏ rõ ràng có các giai đoạn sau
1) Khai báo:Chúng tôi khai báo tên của con trỏ và xác định cấu trúc của truy vấn
2) Mở:Câu lệnh mở thực hiện truy vấn và liên kết bất kỳ biến nào được tham chiếu. Các hàng được xác định bởi truy vấn được gọi là tập hợp Hoạt động. Và bây giờ có sẵn để tìm nạp
Bộ Hoạt động là gì: Tập hợp các hàng được trả về bởi một truy vấn nhiều hàng
Kích thước của nó là số hàng đáp ứng tiêu chí tìm kiếm của bạn
3) Tìm nạp:Trong giai đoạn này, các hàng được tìm nạp từ con trỏ và sau mỗi lần tìm nạp, bạn kiểm tra con trỏ xem có hàng còn lại nào không, nếu không có hàng nào, bạn tiến hành đóng con trỏ
4) Đóng:Câu lệnh đóng giải phóng tập hợp hàng đang hoạt động và chúng ta có thể mở lại con trỏ để tìm nạp tập hợp hoạt động làm mới
Chi tiết các giai đoạn
Khai báo con trỏ
- Tên con trỏ
- Cấu trúc của Truy vấn
Syntax: CURSOR IS : It includes most of the usual clauses, but INTO Clause is not allowed Example: DECLARE CURSOR cur1 is SELECT address,salary,emp_no,emp_name FROM emp WHERE region=’US’; ……………………………… BEGIN ……………………………… END;
Mở con trỏ
Đến đây Phân tích cú pháp và thực thi Truy vấn đã xong. Sau khi mở con trỏ, các hàng được trả về bởi truy vấn có sẵn để tìm nạp.
Syntax: Open <cursor name> This statement is used within the executable section of the block. It also establishes an active set of the rows Example: OPEN cur1; DECLARE v_salary number; CURSOR cur1 is SELECT salary FROM emp WHERE region=’US’; BEGIN OPEN cur1; LOOP FETCH cur1 into v_salary; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE (v_salary); END LOOP; CLOSE cur1; END; /
Bây giờ con trỏ sẽ trỏ đến hàng đầu tiên trong nhóm hiện hoạt.
Tìm nạp các hàng
Sau khi con trỏ được mở, hàng hiện tại được tải vào các biến. Hàng hiện tại là hàng mà con trỏ hiện đang trỏ. Việc truy xuất dữ liệu vào biến hoặc máy chủ PL / SQL
Biến được thực hiện thông qua câu lệnh FETCH
Syntax: FETCH INTO ;
- Đối với mỗi giá trị cột được trả về bởi truy vấn được liên kết với con trỏ, phải có một
biến tương ứng trong danh sách INTO.
- CŨNG PHẢI Kiểu dữ liệu của họ phải tương thích
ĐÓNG CỬA HÀNG
Nó đóng con trỏ một cách rõ ràng, cho phép nó được mở lại, nếu cần.
Syntax: CLOSE <cursor-name>; Example: CLOSE cur1 Example of Using CLOSE <Cursor Name> DECLARE v_address emp.address%TYPE; CURSOR cur1 is select address from emp; BEGIN OPEN cur1; LOOP FETCH cur1 into v_address; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_address); END LOOP; CLOSE cur1; END; /
Thuộc tính con trỏ rõ ràng
Thuộc tính | Loại | Mô tả |
% ISOPEN | Boolean | Đánh giá thành TRUE nếu con trỏ đang mở |
% NOTFOUND | Boolean | Đánh giá thành TRUE nếu lần tìm nạp gần đây nhất không trả về một hàng |
% TÌM HIỂU | Boolean | Đánh giá thành TRUE nếu lần tìm nạp gần đây nhất trả về một hàng |
% ROWCOUNT | SỐ | Đánh giá tổng số hàng được trả về cho đến nay |
Khái niệm nâng cao với con trỏ Oracle
Con trỏ và Bản ghi Oracle
1) Chúng tôi đã đọc về các bản ghi PLSQL.
2) Chúng tôi có thể xử lý các hàng của tập hợp hoạt động bằng cách tìm nạp các giá trị vào Bản ghi PL / SQL
3) Chúng tôi cũng có thể xác định một bản ghi plsql dựa trên danh sách các cột được chọn trong các con trỏ rõ ràng cũng
Ví dụ
DECLARE CURSOR dept_cursor is Select deptno,dept_name FROM dept; dept_record dept_cursor%rowtype; BEGIN OPEN dept_cursor; LOOP FETCH dept_cursor INTO dept_record; Insert into dept_temp (deptno, deptname) values (dept_record.deptno, dept_record.dept_name); EXIT WHEN dept_cursor%notfound; END LOOP; Commit; CLOSE dept_cursor; END; /
Con trỏ có tham số / con trỏ được tham số hóa trong tiên tri
Syntax: CURSOR cursor_name(parameter_name datatype, ) IS Select_statement;
1) Truyền các giá trị tham số cho con trỏ khi con trỏ được mở và truy vấn được thực thi
2) Mỗi lần mở một con trỏ rõ ràng với các nhóm hoạt động khác nhau
Open cursor_name(parameter_value , ……);
Ví dụ
DECLARE CURSOR cur1(v_deptno number) is Select deptname,dept_loc,dept_pincode from dept where deptno=v_deptno; Dept_record cur1%rowtype; l_deptno number:=111; BEGIN OPEN cur1(112); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; OPEN cur1(l_deptno); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; END; /
Các bài viết có liên quan
Cách làm việc với date trong Oracle sql
Oracle PLSQL Tables
Mọi thứ về bản ghi Oracle PLSQL
25 câu hỏi phỏng vấn oracle plsql thường được hỏi nhất
Oracle PLSQL Block Structure và Oracle PLSQL Variable
Thuộc tính con trỏ