Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Ví dụ cho con trỏ PLSQL - Con trỏ rõ ràng, ngầm định và tham chiếu

Một con trỏ hoạt động logic như một con trỏ vào một tập kết quả. Bạn có thể di chuyển con trỏ qua tập kết quả, xử lý từng hàng, cho đến khi bạn xác định mình đang ở cuối tập kết quả. Có ba loại cú pháp liên quan đến con trỏ:tạo con trỏ, tìm nạp bằng con trỏ và đóng con trỏ. Ngoài ra, có một số thuộc tính của con trỏ mà bạn có thể sử dụng để so sánh logic của mình. Sau đây là các loại con trỏ trong Oracle:

Con trỏ rõ ràng

Con trỏ rõ ràng là con trỏ mà bạn khai báo và sử dụng.

Con trỏ ngụ ý

PL / SQL cho phép bạn bao gồm các câu lệnh SQL, bao gồm các câu lệnh SELECT, như một phần của mã của bạn mà không cần khai báo con trỏ, được gọi là con trỏ ngầm.

Con trỏ Tham chiếu

Một con trỏ tham chiếu đến một tập hợp kết quả. REF CURSOR cho phép bạn chuyển một tham chiếu con trỏ từ đơn vị chương trình PL / SQL này sang đơn vị chương trình PL / SQL khác. Nói cách khác, nó cho phép bạn tạo một biến sẽ nhận con trỏ và cho phép truy cập vào tập kết quả của nó, nhưng trong blog này, tôi chỉ đưa ra các ví dụ cho Con trỏ rõ ràng và ngầm, tôi sẽ đưa ra ví dụ cho Con trỏ tham chiếu và Con trỏ động trong blog khác .Một ví dụ về Con trỏ rõ ràng:DECLARE neaffeeid NUMBER; bắt đầu DATE; denddate DATE; sjobid VARCHAR2 (20); - khai báo con trỏ CURSOR curjob IS SELECT worker_id, start_date, end_date, job_id FROM hr.job_history; BẮT ĐẦU MỞ curjob; LOOP FETCH curjob INTO neosystemeeid, dstartdate, denddate, sjobid; THOÁT KHỎI KHI curjob% NOTFOUND; DBMS_OUTPUT.put_line ('Nhân viên' || nhân viên phục vụ || 'đã có việc làm' || sjobid || 'cho' || (denddate - dstartdate) || 'days.'); KẾT THÚC ĐĂNG NHẬP; CLOSE curjob; END; / Ví dụ tương tự được đưa ra bên dưới cho con trỏ rõ ràng nhưng với For Loop, con trỏ For Loop thông minh hơn vì không cần khai báo các biến để tìm nạp các giá trị trong đó và không cần mở hoặc đóng hoặc kiểm tra xem con trỏ ở cuối con trỏ. Đây là ví dụ:DECLARE CURSOR curjob IS SELECT worker_id, start_date, end_date, job_id FROM hr.job_history; BEGIN FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line ('' Employee '|| jh_rec.employee_id ||' had job '|| jh_rec .job_id || 'for' || (jh_rec.end_date - jh_rec.start_date || 'days.')); END LOOP; END; / Ví dụ về con trỏ ngầm:DECLARE nempno NUMBER; CURSOR curjob LÀ SELECT worker_id, start_date, end_date, job_id FROM hr.job_history; BEGIN - bên dưới truy vấn sql là loại con trỏ ẩn CHỌN COUNT (*) INTO nempno FROM hr.job_history; DBMS_OUTPUT.put_line ('Có' || nempno || 'bản ghi lịch sử nhân viên.'); FOR jh_rec IN curjob ĐĂNG NHẬP DBMS_OUTPUT.put_line ('' Nhân viên '|| jh_rec.employee_id ||' đã có việc làm '|| jh_rec.job_id ||' cho '|| (jh_rec.end_date - jh_rec.start_date ||' ngày. " )); KẾT THÚC LOOP; HẾT; /
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sửa lỗi ORA-65096 khi tạo kiểm tra tự động trong Django bằng Oracle

  2. đây là lỗi ORA-12154:TNS:không thể giải quyết định danh kết nối được chỉ định?

  3. Làm thế nào để khôi phục khi xảy ra lỗi trong khi thực hiện lệnh trình tải sql?

  4. Hàm CONCAT () trong Oracle

  5. Làm cách nào để đếm số lần xuất hiện của một ký tự trong giá trị Oracle varchar?