2016-12-12 4 views
1

2つのデータベースがあり、1つはOracle 11g、もう1つはSql Server 2012にあります。Oracleデータベースには、 BASE_ID。これは作業指示番号で構成されています。2つのテーブルのデータを比較します.1つはOracle、もう1つはSQL Serverです

Sql Serverデータベースには、WorkOrdersという名前の列が含まれているテーブルもあります。これには、作業指示番号も含まれています。私がする必要があるのは、Oracleの列にあるものとSQL Serverの列にあるものを比較し、OracleにあるもののSql Serverにはないものを表示することです。私は、出発点であっても、ここでちょっと困っています。私はちょうどポットショットを取るのです。

private void compare() 
    { 
     try 
     { 
      if (con.State != ConnectionState.Open) 
       con.Open(); 
      DataTable t = new DataTable(); 
      OracleCommand oraCmd = new OracleCommand("SELECT BASE_ID FROM WORK_ORDER x WHERE NOT EXISTS(SELECT NULL FROM [SQLServer].[BACRTest].[WorkOrders] y WHERE y.WorkOrder = x.BASE_ID)", oraconn); 
      OracleDataAdapter dt = new OracleDataAdapter(oraCmd); 
      dt.Fill(t); 
      dataGridView3.DataSource = t; 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.Message); 
     } 

    } 

これはちょうど私が実際にそれが動作するように期待していなかったので、十分に公平であるORA-00903: invalid table nameエラーがスローされます。この混乱は、私がこれまでにしたものです。

ご意見をいただければ幸いです。

+0

なぜ両方のデータベースから日付をフェッチしてメモリ内で比較してみませんか? –

+0

私はこれのようなものを考えました。データを変数にフェッチして比較します。私はそれについてどうやって行くかについてあまりにも確信していません。 – Splunk

+0

OracleとSQL Serverデータベース間に接続があり、これによりOracleはSQL Serverテーブルを照会できますか?これについては、DBAと話し合う必要があります。 –

答えて

0

エントリは異なるDBMS上にあるため、直接クエリを作成することはできません。そのため、エントリをメモリに格納して1つずつ比較する必要があります。おそらく、テーブルを小さなセットに分割して比較することができます。

+0

正しい製品(たとえば、OracleのSQL Server用データベースゲートウェイ、またはOracleインスタンスがODBCをサポートするプラットフォーム上で実行されている場合はODBC用データベースゲートウェイ)をお持ちの場合は、これを確実に行うことができます。しかし、セットアップには少しの労力が必要です。 –

3

正しい製品がインストールされている場合(OracleのSQL Server用のデータベースゲートウェイ、またはODBC用のデータベースゲートウェイなど)は、OracleおよびSQL Server。そのような製品がない場合は、SQL Serverテーブルをカンマ区切りの値(.csv)ファイルにエクスポートしてから、Oracleで外部テーブルを設定して.csvを読み取ることができます。おそらく世界で最もシームレスな方法ではありませんが、これを処理する方法の1つです。

幸運のベスト。

+0

私は2番目のボブの提案 - 他のデータベースにテーブルの1つをインポートし、そこにある2つのテーブルを比較します。両方からデータを取り込み、C#で比較を行うことでそれらを比較すると、Javaやbash(またはExcelなど)は、特に多くのデータを持っている場合に比較するとかなり厄介です。 – mathguy

関連する問題