आप PL/SQL ब्लॉक और डायनेमिक CURSOR
. के साथ कुछ इस तरह की कोशिश कर सकते हैं ध्यान दें कि यहां मैं आईडी =1 और 2 को एक चर के रूप में मनोरंजक कर रहा हूं जिसे आपको पता होना चाहिए और कहीं से गुजरना चाहिए।
DBMS_SQL.RETURN_RESULT
(12c और ऊपर) का उपयोग गतिशील रूप से निर्मित कर्सर से आउटपुट प्रदर्शित करने के लिए किया जाता है। वैकल्पिक रूप से, आप PRINT
. का उपयोग कर सकते हैं REFCURSOR
. से ओ/पी लाने और प्रदर्शित करने का आदेश ।
SET serveroutput ON
DECLARE
v_ref SYS_REFCURSOR;
id1 X.ID%TYPE := 1;
id2 X.ID%TYPE := 2;
v_col VARCHAR2(32);
v_cols VARCHAR2(1000);
BEGIN
FOR r IN
( SELECT column_name FROM USER_TAB_COLUMNS WHERE table_name = 'X'
)
LOOP
EXECUTE IMMEDIATE '
SELECT
CASE
WHEN a.'||r.column_name|| ' = ' || 'b.'|| r.column_name ||'
THEN a.'||r.column_name || ' END
FROM
X a
CROSS JOIN X b WHERE
a.ID = :Id1 AND b.ID = :Id2' INTO v_col USING id1,id2 ;
v_cols := v_cols ||
CASE
WHEN v_col IS NULL THEN
','||r.column_name
END;
END LOOP;
v_cols := TRIM(BOTH ',' FROM v_cols);
OPEN v_ref FOR 'select ' || v_cols || ' FROM X WHERE ID = '||id1||'
UNION ALL select ' || v_cols || ' FROM X WHERE ID = '||id2 ;
DBMS_SQL.RETURN_RESULT(v_ref);
END;
/
ResultSet #1
ID CITY ZIP SEGMENT_ONE
------------------ --------- ------------ -----------
1 14228 X71
2 JamesTown 14845 X72
PL/SQL procedure successfully completed.