【问题标题】:Insert data into database using sqlldr in coldfusion在coldfusion中使用sqlldr将数据插入数据库
【发布时间】:2019-06-07 14:35:08
【问题描述】:

我有一个从网站获得的 CSV 文件。我需要使用 ColdFusion 中的 SQLLDR 将相同的 CSV 文件上传到我的数据库中。由于某种原因,我无法将数据插入数据库。

下面是我的代码。使用此代码,我无法将数据从 CSV 文件插入数据库。它是批处理文件中的工作文件,但使用 cfexecute 无法正常工作。我的意思是,我得到一个空白屏幕。没有错误,没有例外,什么都没有。检查了日志,但我也没有收到任何错误。我唯一能看到的是数据没有插入到数据库中。

仅供参考,我们使用的是Linux环境,所以路径略有不同。

<cfset CTLPATH="/home/mosuser/apps/nodal/ctl">
<cfset LOGPATH="/home/mosuser/apps/nodal/logs">

<cfexecute name="/opt/oracle/product/12.1.0/client_1/bin/sqlldr" 
    arguments="userid/password@Sid control=#CTLPATH#/mpimReport.ctl 
    log=#LOGPATH#/#PathfileName#_load.log data=#filelist##PathfileName#.csv 
    bad=#LOGPATH#/#PathfileName#_error.txt">
</cfexecute>

更新:

按照建议,转储错误变量qryerr 显示:

未找到消息 2100;没有产品=RDBMS 的消息文件, 设施=ULMessage 2100 未找到;没有产品=RDBMS 的消息文件, 设施=UL

【问题讨论】:

  • 另外,您能否详细说明“不工作”?
  • 我得到一个空白屏幕。没有错误,没有例外,什么都没有。检查了日志,但我也没有收到任何错误。我唯一能看到的是数据无法插入数据库,所以检查我是否遗漏了其他东西

标签: linux csv coldfusion sql-loader cfexecute


【解决方案1】:

为您的&lt;cfexecute&gt; 调用添加一些参数。

  • timeout - 以预计进程需要的秒数为顺序
  • variable - 保存 sqlldr 的 STDOUT 输出的变量的名称
  • errorVariable - 保存 sqlldr 的 STDERR 输出的变量的名称

完成此操作后,您可以获得调用的输出并检查它是否有任何错误消息和其他信息。

添加超时是关键步骤 - 这会使cfexecute 阻塞,直到程序终止或达到超时。在没有超时的情况下,ColdFusion 会简单地启动进程并立即继续执行当前页面的其余部分。

【讨论】:

  • 感谢您的回复,即使添加了您指定的变量,我也看不出有什么不同
  • @user3440782 这些变量的内容告诉你什么? cfexecute 电话在做什么?您收到错误消息吗?
  • 这两个变量(qryqryerr)转储时的内容是什么?
  • 您的 ColdFusion 用户是否有权执行该文件?
猜你喜欢
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 2013-04-04
  • 2016-09-18
  • 2014-08-28
  • 1970-01-01
相关资源
最近更新 更多