您可以使用PL / SQL块和Dynamic尝试这样的操作
CURSOR。请注意,这里我使用ID =
1和2作为变量,您应该知道该变量并将其从某个地方传递。
DBMS_SQL.RETURN_RESULT(12c及更高版本)用于显示动态构造的游标的输出。或者,您可以使用
/ p
REFCURSOR。
SET serveroutput onDECLARE 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 #1ID CITY ZIP SEGMENT_ONE ------------------ --------- ------------ ----------- 1 14228 X71 2 JamesTown 14845 X72PL/SQL procedure successfully completed.



