plsql过程比较没有任何主键列

时间:2017-03-22 15:16:04

标签: oracle stored-procedures plsql

必须比较以下两个表之间的数据差异。我通过编写MINUS查询来实现这一点,但这不适合当前的赋值。因为很少有表有50-60列,每次都必须在执行前提及列。

我跟着Expert's response并未成功实现目标。基本上我想写一个程序:

  1. 接受两个表名作为参数。
  2. 获取 CustomerTable 的所有列。
  3. 然后,仅使用在步骤2中获取的列,在 CustomerTable StagingCustTable 之间进行MINUS查询。
  4. 记录任何差异。
  5. CustomerTable的

    • Custromer_Number
    • 地址
    • ORDER_NUMBER
    • 联系
    • 国家
    • Post_Code
    • 金额

    StagingCustTable

    • Custromer_Number
    • 地址
    • ORDER_NUMBER
    • 联系
    • 国家
    • Post_Code
    • 金额
    • Run_Id
    • RECORD_ID

1 个答案:

答案 0 :(得分:1)

我不会使用过程而是使用查询来生成最终查询 一种动态SQL 简单的例子 - 假设我们有以下表格和数据:

CREATE TABLE CustomerTable(
Custromer_Number int,
Address varchar2(100),
order_Number int,
Contact int,
Country varchar2(10),
Post_Code varchar2(10),
Amount number
);

INSERT ALL 
INTO CustomerTable VALUES (1, 'aaa', 1, 1, 'AA', '111', 111.11 )
INTO CustomerTable VALUES (2, 'bbb', 2, 2, 'BB', '222', 222.22 )
SELECT 1 FROM dual;

CREATE TABLE StagingCustTable
AS SELECT t.*, 1 As run_id, 1 as record_id
FROM CustomerTable t
WHERE 1=0;

INSERT ALL 
INTO StagingCustTable VALUES (1, 'aaa', 1, 1, 'AA', '111', 111.11, 1, 1 )
INTO StagingCustTable VALUES (3, 'ccc', 3, 3, 'CC', '333', 333.33, 3, 3 )
SELECT 1 FROM dual;
commit;

现在,当您运行此简单查询时:

SELECT 'SELECT ' || listagg( column_name, ',' ) WITHIN GROUP ( ORDER BY column_id ) 
       || chr(10) || ' FROM ' || max( table_name ) 
       || chr(10) || ' MINUS '
       || chr(10) || 'SELECT ' || listagg( column_name, ',' ) WITHIN GROUP ( ORDER BY column_id ) 
       || chr(10) || ' FROM StagingCustTable '  as MySql
FROM user_tab_columns
WHERE table_name = upper( 'CustomerTable' );

您将获得以下结果:

MYSQL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
-------------------------------------------------------------------------
SELECT CUSTROMER_NUMBER,ADDRESS,ORDER_NUMBER,CONTACT,COUNTRY,POST_CODE,AMOUNT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
  FROM CUSTOMERTABLE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
MINUS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
SELECT CUSTROMER_NUMBER,ADDRESS,ORDER_NUMBER,CONTACT,COUNTRY,POST_CODE,AMOUNT
 FROM StagingCustTable 

现在只需复制上面的查询,将其粘贴到SQL客户端,运行它 - 任务就在几分钟内完成。