oracle 19 通过 sqlldr导入数据中遇到的问题

1 篇文章 0 订阅
1 篇文章 0 订阅

近期开发了个功能,数据库是用的是oracle 19,需要用到sqlLoader导入数据,开发过程中遇到的问题,记录一下:
ctl文件写好,.dat文件准备好等;

第一
java.io.IOException: Cannot run program "@conn“: error=2,没有那个文件或目录

指向@conn–数据库连接串,认定@conn为一个文件或目录,也是头一回碰到,排查过@conn(username/password@database)的书写是否规范问题,确认无误后;

再去排查服务器:
a.环境变量ORACLE_HOME是否为空;
b.环境变量PATH中是否配置了sqlldr的路径;
c.oracle安装目录bin下是否有sqlldr的可执行文件;

以上abc均正常;

第二
代码中关于data,log,bad等文件的路径正常,本地debug到这行代码直接抛异常,
Process p = Runtime.getRuntime().exec(cmd);

处理方法:
a.在java代码中cmd命令前加“cmd ” --> cmd @conn control=.ctl log= .log bad=.bad;
b.在java代码中cmd命令前加“cmd /C ” --> cmd /C @conn control=
.ctl log= .log bad=.bad;
c.在java代码中cmd命令前加“sqlldr " --> sqlldr @conn control=*.ctl log= .log bad=.bad”;
a和b出现提示: -bash cmd 或则 -bash cmd /C not found;

c的情况出现提示
java.io.IOException: Cannot run program “sqlldr“: error=2,没有那个文件或目录

这里的abc三步,均在本地服务器上调试的

第三
本着不信邪的想法,直接在服务器上执行分别执行上述abc三步的命令,
a和b出现提示: -bash cmd 或则 -bash cmd /C not found;

不一样的是c,
c 命令正常执行,sqlldr @conn control=*.ctl log= .log bad=.bad

心想,我真该si啊,太相信本地的开发环境了,
心想,我真该si啊,太相信本地的开发环境了,

但是 0 Rows successfully loaded. 再去看.log文件,原来是number类型引发的ORA-01722问题;

后续在代码中:
Process p = Runtime.getRuntime().exec(“sqlldr ”+cmd);

放服务器上运行,正常导入数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值