Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

PL/SQL Nested Loop dengan kursor

Anda perlu mengambil dari REF CURSOR dan secara dinamis menambahkan column_name ke pernyataan pilih saat membuka kursor. Di sini saya mengambil semua nama kolom dari USER_TAB_COLUMNS untuk tabel EMPLOYEES dan menetapkan nilai yang sesuai ke 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;
/

Karena panjang semua kolom Employees adalah <50 , ini berfungsi dengan baik. Konversi terjadi secara implisit untuk NUMBER dan DATE tipe data.

Berikut adalah contoh Output.

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. nomor baris tidak menampilkan baris apa pun saat menggunakan antar kata kunci

  2. Contoh Fungsi Oracle Untuk Mendapatkan Jumlah Hari Antara Dua Tanggal

  3. bagaimana cara mengubah tanggal menjadi angka bulan?

  4. Pendekatan yang benar untuk menginisialisasi JMS Listener asinkron dan membiarkannya berjalan tanpa batas

  5. Perilaku aneh dari gabungan luar penuh di Oracle - bagaimana itu bisa dijelaskan?