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 динамичен SQL, който беше въведен в 11g. Уви, казвате, че използвате 10 g.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да импортирате Oracle 11g RMAN backupset на нов сървър на база данни?

  2. Как да създадете дефинирана от потребителя променлива за тип данни в Oracle Database

  3. Как да създадете VARRAY като обект на база данни в базата данни на Oracle

  4. Направете кумулативна сума в оглед оракул

  5. Обратно към подканата на sqlplus