You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ODI 12c:如何用Java SDK在Studio外导出导入特定对象?

ODI 对象导出/导入纯Java实现方案

核心依赖与初始化

首先需要引入ODI安装目录下的核心API依赖包(如odi-core.jar、odi-sdk.jar等),然后初始化ODI实例建立与主库、工作库的连接:

import oracle.odi.core.OdiInstance;
import oracle.odi.core.config.MasterRepositoryDbInfo;
import oracle.odi.core.config.OdiInstanceConfig;
import oracle.odi.core.config.WorkRepositoryDbInfo;
import oracle.jdbc.pool.OracleDataSource;

public class OdiObjectHandler {
    private OdiInstance odiInstance;

    public void initOdiInstance() throws Exception {
        // 配置主库数据源
        OracleDataSource masterDs = new OracleDataSource();
        masterDs.setURL("jdbc:oracle:thin:@//your-db-host:1521/your-service");
        masterDs.setUser("ODI_MASTER");
        masterDs.setPassword("your-password");
        MasterRepositoryDbInfo masterDbInfo = new MasterRepositoryDbInfo(masterDs, "WORKREP_NAME");

        // 配置工作库数据源
        OracleDataSource workDs = new OracleDataSource();
        workDs.setURL("jdbc:oracle:thin:@//your-db-host:1521/your-service");
        workDs.setUser("ODI_WORK");
        workDs.setPassword("your-password");
        WorkRepositoryDbInfo workDbInfo = new WorkRepositoryDbInfo(workDs, "WORKREP_NAME");

        // 创建ODI实例
        OdiInstanceConfig odiConfig = new OdiInstanceConfig(masterDbInfo, workDbInfo);
        odiInstance = OdiInstance.createInstance(odiConfig);
    }
}

对象导出到XML

利用ODI API的IOdiExportService,针对不同类型对象实现导出:

导出映射(Mapping)

import oracle.odi.domain.project.OdiMapping;
import oracle.odi.core.service.IOdiExportService;
import oracle.odi.domain.project.OdiProject;
import java.io.FileOutputStream;

public void exportMapping(String projectCode, String mappingName, String outputPath) throws Exception {
    IOdiExportService exportService = odiInstance.getTransactionalEntityManager().getService(IOdiExportService.class);
    
    // 获取目标项目与映射对象
    OdiProject project = odiInstance.getTransactionalEntityManager().find(OdiProject.class, projectCode);
    OdiMapping mapping = odiInstance.getTransactionalEntityManager().find(OdiMapping.class, new OdiMapping.OdiMappingId(project, mappingName));
    
    // 写入XML文件
    try (FileOutputStream fos = new FileOutputStream(outputPath)) {
        exportService.exportObject(mapping, fos, IOdiExportService.ExportFormatType.XML, true, null, null);
    }
}

导出变量(Variable)

import oracle.odi.domain.project.OdiVariable;

public void exportVariable(String projectCode, String variableName, String outputPath) throws Exception {
    IOdiExportService exportService = odiInstance.getTransactionalEntityManager().getService(IOdiExportService.class);
    
    OdiProject project = odiInstance.getTransactionalEntityManager().find(OdiProject.class, projectCode);
    OdiVariable variable = odiInstance.getTransactionalEntityManager().find(OdiVariable.class, new OdiVariable.OdiVariableId(project, variableName));
    
    try (FileOutputStream fos = new FileOutputStream(outputPath)) {
        exportService.exportObject(variable, fos, IOdiExportService.ExportFormatType.XML, true, null, null);
    }
}

导出过程(Procedure)

import oracle.odi.domain.project.OdiProcedure;

public void exportProcedure(String projectCode, String procedureName, String outputPath) throws Exception {
    IOdiExportService exportService = odiInstance.getTransactionalEntityManager().getService(IOdiExportService.class);
    
    OdiProject project = odiInstance.getTransactionalEntityManager().find(OdiProject.class, projectCode);
    OdiProcedure procedure = odiInstance.getTransactionalEntityManager().find(OdiProcedure.class, new OdiProcedure.OdiProcedureId(project, procedureName));
    
    try (FileOutputStream fos = new FileOutputStream(outputPath)) {
        exportService.exportObject(procedure, fos, IOdiExportService.ExportFormatType.XML, true, null, null);
    }
}

对象从XML导入

通过IOdiImportService实现导入,支持覆盖或新建对象:

import oracle.odi.core.service.IOdiImportService;
import java.io.FileInputStream;

public void importObject(String xmlPath, boolean overwrite) throws Exception {
    IOdiImportService importService = odiInstance.getTransactionalEntityManager().getService(IOdiImportService.class);
    
    try (FileInputStream fis = new FileInputStream(xmlPath)) {
        importService.importObject(fis, IOdiImportService.ImportFormatType.XML, 
            overwrite ? IOdiImportService.ImportPolicy.REPLACE : IOdiImportService.ImportPolicy.CREATE, 
            null, null, null);
    }
}

关键注意事项

  • 确保依赖包完整:从ODI安装目录的oracledi/drivers和oracledi/lib下获取所有相关JAR包。
  • JVM配置:运行时需指定ODI主目录属性,如-Doracle.odi.home=/path/to/your-odi-home。
  • 资源管理:所有IO流需用try-with-resources自动关闭,避免资源泄漏。
  • 数据安全:导入前建议备份工作库,防止误覆盖重要对象。

内容的提问来源于stack exchange,提问作者mansa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:12:09