Oracle
 sql >> база данни >  >> RDS >> Oracle

Намиране на разлика между два реда в таблица. Оракул

Можете да опитате нещо подобно с PL/SQL блок и динамичен CURSOR .Имайте предвид, че тук забавлявам ID =1 и 2 като променлива, която трябва да знаете и да предавате от някъде.

DBMS_SQL.RETURN_RESULT ( 12c и по-горе ) се използва за показване на изхода от динамично конструирания курсор. Като алтернатива можете да използвате PRINT команда за извличане и показване на 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.


  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

  2. Помощ при замяна на обединения на oracle (+) с обединения на ANSI

  3. Как да изпратите POST заявка с данни от формуляр и параметри в PL/SQL

  4. Oracle PL/SQL заявката не се компилира

  5. null срещу празен низ в Oracle