我想导入一个.csv文件到下面的oracle数据库表,但它不工作,日志文件是空的,没有输出。
我的shell脚本如下:
日志文件也总是空的
下面是.csv文件的示例
SendingFri,LoggingTime,RenewalNumber,TransactionType,Status,Duration
22997186945,2023-07-25-00:05:56.301,23900032093333,Payment,SUCCESS,null
22951547347,2023-07-25-00:04:12.794,23900336289912,Payment,SUCCESS,null
#!/bin/bash
# Oracle Database Connection Details
USERNAME='abc'
PASSWORD="abc"
HOST="myip"
PORT="1521"
SERVICE_NAME="abc"
# CSV File Details
CSV_FILE="/home/hdegboevi/modified5.csv"
TABLE_NAME="myCANALINFORMATION"
# Control File
CONTROL_FILE="my_control_file.ctl"
# Create a control file
cat <<EOF > $CONTROL_FILE
LOAD DATA
INFILE '$CSV_FILE'
APPEND INTO TABLE $TABLE_NAME
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
SENDINGFRI,
LOGGINGTIME,
RENEWALNUMBER,
TRANSACTIONTYPE,
STATUS,
DURATON
)
EOF
# Run SQL*Loader
sqlldr $USERNAME/$PASSWORD@$HOST:$PORT/$SERVICE_NAME control=$CONTROL_FILE log=/home/hdegboevi/sqlldr.log /home/hdegboevi
# Check the log for errors
if grep "ORA-" sqlldr.log; then
echo "Error occurred during data load. Please check sqlldr.log for details."
else
echo "Data loaded successfully."
fi
1条答案
按热度按时间r1wp621o1#
您应该已过帐目标表说明;如果没有它,我们必须猜测数据类型。我的幸运猜测(根据样本数据):
这可能是错的
duration
列听起来好像你想把例如。一个数字(something took 2 seconds to complete),但示例数据表明您正在向其中插入字符串(在此上下文中,null
是一个字符串)。用你写的一个控制文件,结果是(在我的数据库里)
控制文件,已修复:
加载会话:
测试结果:
数据在这里。
我建议你先把工作的那一部分做正确(即。加载本身),然后创建shell脚本。我无法提供帮助,我不使用任何类型的Unix操作系统。
[编辑,在您发布表描述后]
所有的列都是
varchar2
。甚至更简单。(我以为这是一个错字,“duraton”对。“duration”;看起来真的是“duraton”,不管那可能是什么)。
控制文件很简单:
加载会话:
测试结果: