Desejo importar um arquivo .csv para uma tabela de banco de dados oracle abaixo, mas não está funcionando e o arquivo de log está vazio sem nenhuma saída.
meu script de shell está abaixo:
e também o arquivo de log está sempre vazio
abaixo está uma amostra do arquivo .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
Você deveria ter postado a descrição da tabela de destino; sem ele, temos que adivinhar os tipos de dados. Meu palpite de sorte (de acordo com dados de amostra):
o que provavelmente está errado;
duration
coluna soa como se você quisesse colocar, por exemplo, um número nela ( algo levou 2 segundos para ser concluído ), mas os dados de exemplo sugerem que você está inserindo uma string nela (null
, neste contexto, é uma string).Com um arquivo de controle que você escreveu, o resultado é (no meu banco de dados)
Arquivo de controle, corrigido:
Sessão de carregamento:
Resultado:
OK; os dados estão aqui.
Eu sugiro que você primeiro faça essa parte do trabalho corretamente (ou seja, carregando-se) e, em seguida, crie um script de shell. Não posso ajudar com isso, não uso nenhum tipo de sistema operacional Unix.
[EDIT, depois que você postou a descrição da tabela]
Ah; então todas as colunas são
varchar2
. Ainda mais simples.(Achei que era um erro de digitação, "duraton" vs. "duration"; parece que realmente é "duraton", seja lá o que for).
O arquivo de controle é trivial:
Sessão de carregamento:
Resultado: