आपको REF CURSOR
. से लाने की आवश्यकता है और कर्सर खोलते समय कॉलम_नाम को चयन कथन में गतिशील रूप से संलग्न करें। यहां मैं USER_TAB_COLUMNS
. से सभी कॉलम नाम ला रहा हूं तालिका के लिए EMPLOYEES
और उनके संबंधित मान 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;
/
चूंकि EMPLOYEES
. के सभी स्तंभों की लंबाई हैं <50 , यह ठीक काम कर रहा है। रूपांतरण NUMBER
. के लिए परोक्ष रूप से होता है और DATE
डेटा प्रकार।
यहाँ एक नमूना आउटपुट है।
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