您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

查找表中两行之间的差异。甲骨文

查找表中两行之间的差异。甲骨文

您可以使用PL / sql块和Dynamic尝试这样的操作CURSOR。请注意,这里我使用ID = 1和2作为变量,您应该知道该变量并将其从某个地方传递。

DBMS_sql.RETURN_RESULT(12c及更高版本)用于显示动态构造的游标的输出。或者,您可以使用PRINTcommand从中获取显示o / p 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.
其他 2022/1/1 18:49:50 有503人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶