AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76921351
Accepted
Godwin
Godwin
Asked: 2023-08-17 20:04:45 +0800 CST2023-08-17 20:04:45 +0800 CST 2023-08-17 20:04:45 +0800 CST

将csv文件导入oracle数据库

  • 772

我想将 .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
oracle
  • 1 1 个回答
  • 29 Views

1 个回答

  • Voted
  1. Best Answer
    Littlefoot
    2023-08-17T20:25:38+08:002023-08-17T20:25:38+08:00

    您应该发布目标表描述;没有它,我们就必须猜测数据类型。我的幸运猜测(根据样本数据):

    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 操作系统。


    [编辑,在您发布表格描述后]

    啊哈;所以所有列都是varchar2. 甚至更简单。

    SQL> desc test
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     SENDINGFRI                                         VARCHAR2(30)
     LOGGINGTIME                                        VARCHAR2(30)
     RENEWALNUMBER                                      VARCHAR2(30)
     TRANSACTIONTYPE                                    VARCHAR2(30)
     STATUS                                             VARCHAR2(30)
     DURATON                                            VARCHAR2(30)
    
    SQL>
    

    (我认为这是一个拼写错误,“duraton”与“duration”;看起来它确实是“duraton”,无论它是什么)。

    控制文件很简单:

    LOAD DATA
    INFILE *
    REPLACE
    INTO TABLE test
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    (
    SENDINGFRI,
    LOGGINGTIME,
    RENEWALNUMBER,
    TRANSACTIONTYPE,
    STATUS,
    DURATON
    )
    
    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=test49a.ctl log=test49a.log
    
    SQL*Loader: Release 18.0.0.0.0 - Production on Čet Kol 17 14:48:15 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:
      test49a.log
    for more information about the load.
    

    结果:

    SQL> select * from test;
    
    SENDINGFRI   LOGGINGTIME               RENEWALNUMBER   TRANSACTIONTYPE STATUS     DURATON
    ------------ ------------------------- --------------- --------------- ---------- ----------
    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>
    
    • 0

相关问题

  • 在Oracle中获取前一小时的记录

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve