2016-12-07 19 views
0

私は2つの異なるデータベース間でテーブルの構造を比較するタスクを持っています。列が見つからない場合は、不足している列とそのテーブルを報告する必要があります。2つの異なるデータベースのテーブルの構造を比較するplsql

単純なマイナスクエリは返されません。私はSQLプログラミングにとって非常に新しいので、私はアイディアを得ていません。

誰か助けてもらえますか?

Table 1: 
Columns 
ABC 
DEF 
GHI 

Table2: 
ABC 
DEF 
GHI 
JKL 

ここには追加の列があります。これを報告しなければならない場合は、どうすればいいですか?

PFB私の簡単なPROC:

create or replace PROCEDURE PROC_EU_TABLE_COMPARE (
R_CURSOR OUT SYS_REFCURSOR, 
SRC_SCHEMA_NAME   IN VARCHAR2, 
TGT_SCHEMA_NAME   IN VARCHAR2 
) 

IS 


CNT3 NUMBER; 
SQL_TEXT3 VARCHAR2(4000); 

BEGIN 

--SRC_SCHEMA_NAME  := UPPER(SRC_SCHEMA_NAME); 
--TGT_SCHEMA_NAME  := UPPER(TGT_SCHEMA_NAME); 


SQL_TEXT3:='SELECT * FROM 
((SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME =''%EU%'' AND OWNER ='''||SRC_SCHEMA_NAME||''' 
     MINUS 
     SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME LIKE ''%EU%''AND OWNER ='''||TGT_SCHEMA_NAME||''') 
     UNION 
     (SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME LIKE ''%EU%''AND OWNER ='''||TGT_SCHEMA_NAME||''' 
     MINUS 
     SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME =''%EU%'' AND OWNER ='''||SRC_SCHEMA_NAME||'''))'; 

     EXECUTE IMMEDIATE SQL_TEXT3 INTO CNT3; 
     DBMS_OUTPUT.PUT_LINE(CNT3); 

END; 
+2

独自のコードを記述することなく、かなりのオプションがあります。たとえば、SQL Developerはスキーマ・オブジェクトを比較します。 http://www.dba-oracle.com/t_compare_schemas.htm – Rene

答えて

1

まず、開発者向けのIDE(PL/SQLの開発者は、Oracle SQL Developerは)スキーマを比較するためのツールを持っています。
また、2つのデータベースについて質問していますが、コード内で同じデータベース内に2つのスキーマを比較します。違いを理解していることを確認してください。
最後に、すぐに実行する必要はありません。 SQL * Plusのここでのスクリプト:

SQL> create table table1 (
    abc number, 
    def number, 
    ghi number); 

Table created. 

SQL> create table table2 (
    abc number, 
    def number, 
    ghi number, 
    jkl number); 

Table created. 

SQL> create or replace procedure compare_tables is 
begin 
    for i in (select column_name 
       from all_tab_columns 
      where table_name = 'TABLE2' 
      minus 
      select column_name 
       from all_tab_columns 
      where table_name = 'TABLE1') loop 
    dbms_output.put_line(i.column_name);   
    end loop; 
end; 
/

Procedure created. 

SQL> begin 
    dbms_output.put_line('Columns of table2 not presented in table1:'); 
    compare_tables; 
end; 
/

Columns of table2 not presented in table1: 
JKL 

PL/SQL procedure successfully completed. 

あなたにほぼ等しいこのコード、それが動作しない場合は、手動でテーブルを比較したりreproduceble例を作成してみて。

関連する問題