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

So sánh hai bản ghi và chỉ hiển thị sự khác biệt

Đây là một cách tiếp cận công cụ đơn giản để giải quyết vấn đề.

create or replace function col_diff
    ( p_empno_1 in emp.empno%type
      , p_empno_2 in emp.empno%type )
    return col_nt pipelined
is
    out_val col_t := new col_t(null, null, null);
    emp_rec1 emp%rowtype;
    emp_rec2 emp%rowtype;
begin
    select *
    into emp_rec1
    from emp
    where empno = p_empno_1;
    select *
    into emp_rec2
    from emp
    where empno = p_empno_2;

    if emp_rec1.ename != emp_rec2.ename
    then
        out_val.col_name := 'ENAME';
        out_val.old_val := emp_rec1.ename;
        out_val.new_val := emp_rec2.ename;
        pipe row (out_val); 
    end if;
    if emp_rec1.hiredate != emp_rec2.hiredate
    then
        out_val.col_name := 'HIREDATE';
        out_val.old_val := to_char(emp_rec1.hiredate, 'DD-MON-YYYY');
        out_val.new_val := to_char(emp_rec2.hiredate, 'DD-MON-YYYY');
        pipe row (out_val); 
    end if;
    return;
end;
/

Vì vậy, với dữ liệu thử nghiệm này ...

SQL> select empno, ename, hiredate
  2  from emp
  3  where empno > 8100
  4  /

     EMPNO ENAME      HIREDATE
---------- ---------- ---------
      8101 PSMITH     03-DEC-10
      8102 PSMITH     02-JAN-11

SQL>

... chúng tôi nhận được kết quả này:

SQL> select * from table (col_diff(8101,8102))
  2  /

COL_NAME
------------------------------
OLD_VAL
-------------------------------------------------------------------
NEW_VAL
-------------------------------------------------------------------
HIREDATE
03-DEC-2010
02-JAN-2011


SQL>

Bây giờ, chắc chắn bạn muốn một cái gì đó ít dài dòng hơn. Tôi nghĩ rằng có thể làm điều gì đó bằng cách sử dụng SQL động Phương pháp 4 nâng cao đã được giới thiệu trong 11g. Than ôi, bạn nói rằng bạn đang sử dụng 10g.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu trữ dữ liệu ngày giờ dưới dạng số

  2. Chuyển đổi và tổng hợp dữ liệu cột Oracle

  3. Sử dụng câu lệnh WITH và UPDATE trong cùng một truy vấn SQL

  4. Quy trình được lưu trữ trong SQL để kiểm tra giá trị có / không trong bảng và thực thi sql

  5. ORA-01017 Mẹo giải quyết lỗi Oracle