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

PL / SQL lồng nhau vòng lặp với con trỏ

Bạn cần tìm nạp từ REF CURSOR và tự động nối thêm tên cột vào câu lệnh select trong khi mở con trỏ. Ở đây tôi đang tìm nạp tất cả các tên cột từ USER_TAB_COLUMNS cho bảng EMPLOYEES và gán các giá trị tương ứng của chúng cho v_temp.

SET SERVEROUTPUT ON;
DECLARE
  v_temp VARCHAR(50);
  query1 VARCHAR2(1000);
  c1 SYS_REFCURSOR;
  CURSOR c2
  IS
    SELECT COLUMN_NAME xxx FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'EMPLOYEES';
BEGIN
  FOR s2 IN c2
  LOOP
    --do something
    query1 := 'SELECT ' ||s2.xxx||' FROM EMPLOYEES';
    OPEN c1 FOR query1 ;
    LOOP
      FETCH c1 INTO v_temp;
      DBMS_OUTPUT.PUT_LINE('COLUMN:'||s2.xxx||', VALUE:'|| v_temp);
      EXIT
    WHEN c1%NOTFOUND;
    END LOOP;
    CLOSE c1;
  END LOOP;
END;
/

Vì độ dài của tất cả các cột của Employees <50, nó đang hoạt động Tốt. Việc chuyển đổi diễn ra ngầm đối với NUMBERDATE kiểu dữ liệu.

Đây là đầu ra mẫu.

COLUMN:EMPLOYEE_ID, VALUE:100
COLUMN:EMPLOYEE_ID, VALUE:101
COLUMN:EMPLOYEE_ID, VALUE:102
COLUMN:FIRST_NAME, VALUE:Eleni
COLUMN:FIRST_NAME, VALUE:Eleni
COLUMN:LAST_NAME, VALUE:Whalen
COLUMN:LAST_NAME, VALUE:Fay
COLUMN:HIRE_DATE, VALUE:17-06-03
COLUMN:HIRE_DATE, VALUE:21-09-05


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất xem Oracle với rownum

  2. Chuyển đổi WM_CONCAT sang Listagg

  3. Tại sao chạy truy vấn này với EXECUTE NGAY LẬP TỨC khiến nó không thành công?

  4. Dấu ngoặc vuông trong câu truy vấn SQL của Oracle là gì?

  5. Oracle:Tôi cần một phần bên ngoài tham gia. Nhìn vào hình ảnh