2016-12-14 72 views
0

使用Oracle 11g我想如何將new_table的行輸出到假脫機文件並對我正在採取的方法進行完整性檢查。PL SQL代碼來從兩個模式和多個視圖獲得可能的差異數據具有相同的意見,並應具有相同的數據

我不能做一個選擇使用變量,因爲我在看很多視圖和字段是不同的每個。

當我在一個測試視圖(其中我修改了基表與第二個模式不同)後,我得到了所需的結果集。

但是我怎麼能得到這個輸出爲dbms_output.print_line?還是有更好的解決方案?

謝謝。

DECLARE 

    sql_stmt varchar2(400); 

    cursor c1 is SELECT view_name from all_views where owner = 'ownerx’ AND view_name like 'xxx_%' OR view_name like 'yyy_%' order by view_name; 

BEGIN 

    for i IN c1 loop 
     sql_stmt := 'create table new_table as select * FROM schemaa.'||i.VIEW_NAME||' minus ' || 'select * FROM schemab.'||i.VIEW_NAME; 

     execute immediate sql_stmt; 

     dbms_output.put_line(sql_stmt); 
     -- Wish to list the result set from new_table via dbms_output.put_line() 

     execute immediate 'drop table new_table'; 

END; 

回答

0

試圖將問題減少打印變量表的內容,你必須做一些假設:例如,你可以有CLOBS,BLOBS,XMLTYPE問題;此外,您必須爲數字和日期列選擇默認格式,或者僅依靠隱式投射的設置。

假設您有一個包含日期,數字和字符串的表格,您可以動態構建一個打印表格內容的查詢。 例如,如果您有:

create table someTable(a_number, a_string, a_date) as (
select 1, 'one', sysdate from dual union all 
select 2, 'two', sysdate+1 from dual 
); 

您可以打印與內容:通過檢查DATA_TYPE

SQL> declare 
    2  vSQL varchar2(1000); 
    3  vRow varchar2(1000); 
    4 
    5  cur sys_refcursor; 
    6 begin 
    7  select 'SELECT ' || 
    8    listagg(column_name, ' || '' - '' || ') within group (order by column_name) || 
    9    ' from ' || table_name 
10  into vSQL 
11  from all_tab_columns 
12  where table_name = 'SOMETABLE' 
13  and owner = 'ALEK' 
14  group by table_name; 
15  -- 
16  open cur for vSQL; 
17  loop 
18   fetch cur into vRow; 
19   exit when cur%NOTFOUND; 
20   -- 
21   dbms_output.put_line(vRow); 
22  end loop; 
23 end; 
24/
14-DIC-16 - 1 - one 
15-DIC-16 - 2 - two 

PL/SQL procedure successfully completed. 

您可以優化該處理多種列,以應用所需的格式以數字,日期,時間戳,...

順便說一句,請注意,MINUS不會給出兩個對象之間的區別,但只有第一個不在第二個的行之間的區別。如果第二個視圖有比第一個更多的行,MINUS不會告訴你。 當然,只有當您比較的視圖具有完全相同的列時,此方法才能起作用。

此外,動態SQL你不需要創建一個表來打印,但你可以循環的結果MINUS(或任何你想用來評估差異)。

+0

感謝Aleksej的及時回覆。我會檢查出來的。 – user3797654

+0

Aleksej。這很好!謝謝。 – user3797654

相關問題