Pergunta

I want to access oracle tables in DB2(something like DBlink from DB2 to oracle).Any help is appreciated.

Foi útil?

Solução

You can use db2 federation. One link is here.

Outras dicas

Oracle has a feature called Heterogeneous Services which allows us to build links between Oracle databases and non-Oracle databases, including DB2. Find out more.

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;

    }

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top