2011-09-22 70 views
2

我想訪問DB2中的oracle表(類似DBlink從DB2到oracle)。任何幫助表示讚賞。將oracle表複製到DB2

+0

是否要將數據從Oracle遷移到DB2?從Oracle訪問DB2表(甚至不確定這是否可能)? – Shahzeb

+1

如果您想a)將數據從Oracle複製到DB2或b)從DB2訪問Oracle表或從c)訪問Oracle的DB2表,則應該下定決心。 – Filburt

+0

我想訪問DB2中的Oracle表,但我沒有找到任何文檔。 – hnm

回答

4

您可以使用db2聯合。一個鏈接是here

+0

謝謝,這非常有用。 – hnm

+0

鏈接處於非活動狀態。 – Isaac

1

Oracle有一項名爲異構服務的功能,它允許我們在Oracle數據庫和非Oracle數據庫(包括DB2)之間建立鏈接。 Find out more

+0

異構服務允許訪問oracle中的DB2表,但是我們現在需要的是訪問DB2中的oracle表。 – hnm

0
import com.ibm.db2.jcc.am.gc; 
import com.ibm.db2.jcc.t2zos.s; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.Statement; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import static org.omg.IOP.ENCODING_CDR_ENCAPS.value; 

public class automateExport { 

    static String value; 

    public static void main(String[] args) throws SQLException, ClassNotFoundException { 
     // ResultSet rs = null; 
     String table_name; 
     Integer temp = 0; 
     Integer temp1 = 0; 
     Integer temp2 = 1; 
     String column_name = null; 
     String tableName = null; 
     String columnType = null; 
     int precision = 0; 

     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection codal = DriverManager.getConnection("jdbc:oracle:thin:@192.168.01.53:1521:orcl", "NAVID", 
       "oracle"); 

     StringBuilder sb = new StringBuilder(1024); 

     Connection DB2 = getConnection(); 
     String sql = "SELECT TABSCHEMA,TABNAME,COLNAME,TYPENAME,LENGTH FROM SYSCAT.COLUMNS WHERE TABSCHEMA NOT LIKE 'SYS%' "; 
     PreparedStatement mainStmt = DB2.prepareStatement(sql); 
     ResultSet rs = mainStmt.executeQuery(); 
     ResultSetMetaData rsmd = rs.getMetaData(); 
     int columnCount = rsmd.getColumnCount(); 
     String str1 = "ADMIN2"; 

     while (rs.next()) { 

      table_name = rs.getString(2); 

      if (table_name.equalsIgnoreCase(str1)) { 
       if (temp1 == 0) { 

        sb.append("create table").append(" "); 
        sb.append(table_name).append("("); 
        if (temp2 == 0) { 
         sb.append(" ").append(column_name).append(" ").append(columnType); 
         if (precision != 0) { 
          sb.append("(").append(precision).append(")"); 
          sb.append(", "); 

         } 
        } 

        temp1 = 1; 
        temp = 1; 
       } 

       if (temp == 0) { 
        sb.append(table_name).append("("); 
        temp = 1; 
       } 
       column_name = rs.getString(3); 
       columnType = rs.getString(4); 
       sb.append(" ").append(column_name).append(" ").append(columnType); 
       precision = rs.getInt(5); 
       if (precision != 0) { 
        sb.append("(").append(precision).append(")"); 
        sb.append(", "); 
       } 
      } else { 
       temp2 = 0; 
       sb.replace(sb.length() - 2, sb.length(), ""); 
       sb.append(")"); 
       temp1 = 0; 
       str1 = str1.replaceAll(str1, table_name); 
       column_name = rs.getString(3); 
       columnType = rs.getString(4); 
       precision = rs.getInt(5); 
       String sql2 = sb.toString(); 
       PreparedStatement m = codal.prepareStatement(sql2); 
       m.executeUpdate(); 
       sb.delete(0, sb.length()); 
      } 
     } 
     codal.close(); 
     DB2.close(); 
/* 


     } 


    private static Connection getConnection() throws ClassNotFoundException, SQLException { 
     Class.forName("COM.ibm.db2os390.sqlj.jdbc.DB2SQLJDriver"); 
     Connection connection 
       = DriverManager.getConnection("jdbc:db2://localhost:50000/navid", "navid", "oracle"); 
     return connection; 

    } 

} 
相關問題