导入csv文件到oracle数据库

问题描述 投票:0回答:1

我想将 .csv 文件导入到下面的 oracle 数据库表中,但它不起作用,并且日志文件为空,没有任何输出。

我的 shell 脚本如下:

并且日志文件始终为空

下面是 .csv 文件的示例

发送星期五、记录时间、续订编号、交易类型、状态、持续时间 22997186945,2023-07-25-00:05:56.301,23900032093333,付款,成功,空 22951547347,2023-07-25-00:04:12.794,23900336289912,付款,成功,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
sql database oracle sql-loader
1个回答
0
投票

您应该发布目标表描述;没有它,我们就必须“猜测”数据类型。我的幸运猜测(根据样本数据): SQL> desc test Name Null? Type ----------------------------------------- -------- ---------------------------- SENDINGFRI NUMBER LOGGINGTIME TIMESTAMP(6) RENEWALNUMBER NUMBER TRANSACTIONTYPE VARCHAR2(20) STATUS VARCHAR2(10) DURATION VARCHAR2(20) SQL>

这可能是错误的; 
duration

列听起来好像您想将例如其中有一个数字(

需要 2 秒才能完成
),但示例数据表明您正在向其中插入一个字符串null,在这种情况下,是一个字符串)。
使用您编写的控制文件,结果是(在我的数据库中)

Record 1: Rejected - Error on table TEST, column LOGGINGTIME. ORA-01843: not a valid month

控制文件,已修复:

LOAD DATA INFILE * REPLACE INTO TABLE test FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( SENDINGFRI, LOGGINGTIME "to_timestamp(:loggingtime, 'yyyy-mm-dd-hh24:mi:ss.ff')", RENEWALNUMBER, TRANSACTIONTYPE, STATUS, DURATION ) begindata 22997186945,2023-07-25-00:05:56.301,23900032093333,Payment,SUCCESS,null 22951547347,2023-07-25-00:04:12.794,23900336289912,Payment,SUCCESS,null

加载会话:

SQL> $sqlldr scott/tiger@orcl control=test49.ctl log=test49.log SQL*Loader: Release 18.0.0.0.0 - Production on Čet Kol 17 14:23:09 2023 Version 18.5.0.0.0 Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved. Path used: Conventional Commit point reached - logical record count 1 Commit point reached - logical record count 2 Table TEST: 2 Rows successfully loaded. Check the log file: test49.log for more information about the load.

结果:

SQL> select * from test; SENDINGFRI LOGGINGTIME RENEWALNUMBER TRANSACTIONTYPE STATUS DURATION ------------- ------------------------- ---------------- -------------------- ---------- -------------------- 22997186945 25.07.23 00:05:56,301000 23900032093333 Payment SUCCESS null 22951547347 25.07.23 00:04:12,794000 23900336289912 Payment SUCCESS null SQL>

好的;数据在这里。

我建议您首先正确完成这部分工作(即加载自身),然后创建一个 shell 脚本。我对此无能为力,我不使用任何类型的 Unix 操作系统。

© www.soinside.com 2019 - 2024. All rights reserved.