Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

दो रिकॉर्ड की तुलना करें और केवल अंतर दिखाएं

यहाँ समस्या के लिए एक कुंद साधन दृष्टिकोण है।

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;
/

तो, इस परीक्षण डेटा को देखते हुए...

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>

... हमें यह आउटपुट मिलता है:

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

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


SQL>

अब, निःसंदेह आप कुछ ऐसा चाहेंगे जो कम वर्बोज़ हो। मुझे लगता है कि उन्नत विधि 4 गतिशील एसक्यूएल का उपयोग करके कुछ करना संभव हो सकता है जिसे 11 जी में पेश किया गया था। काश, आप कहते कि आप 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. जावा और ऑरेकल XE के बीच डेटा स्रोत कनेक्शन के साथ OCI और THIN ड्राइवर कनेक्शन में क्या अंतर है?

  2. VBA स्क्रिप्ट निष्पादित करते समय अनिर्दिष्ट रन टाइम त्रुटि

  3. Oracle में एक संख्या को प्रतिशत के रूप में प्रारूपित करें

  4. ग्राहक और महीने द्वारा नवीनतम मूल्य के साथ पंक्ति

  5. स्तंभों की संख्या