Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tìm sự khác biệt giữa hai hàng trong bảng. Oracle

Bạn có thể thử một cái gì đó như thế này với một khối PL / SQL và CURSOR động Lưu ý rằng ở đây tôi đang sử dụng ID =1 và 2 như một biến mà bạn nên biết và đang chuyển từ đâu đó.

DBMS_SQL.RETURN_RESULT (12c trở lên) được sử dụng để hiển thị đầu ra từ con trỏ được xây dựng động. Ngoài ra, bạn có thể sử dụng PRINT lệnh tìm nạp và hiển thị o / p từ 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter LỖI

  2. Ứng dụng Qt gặp sự cố khi sử dụng trình điều khiển ODBC (macOS)

  3. Làm cách nào để chỉ trích xuất giá trị ngày tháng từ trường ngày tháng trong Oracle?

  4. ORA-01401:giá trị được chèn quá lớn cho cột CHAR

  5. Chuyển đổi ký tự đặc biệt thành văn bản thuần túy trong oracle