Bash Unix-CSV到Oracle数据库数据问题

Bash Unix-CSV到Oracle数据库数据问题,bash,unix,ms-access,csv,export-to-csv,Bash,Unix,Ms Access,Csv,Export To Csv,我正在通过Unix使用sqlplus将长数字从CSV导入Oracle数据库 我有数字 55000000024 55000000017 导入数据库时,它们显示为 5.5E+11 5.5E+11 谁能建议一种方法,我可以导入完整的数字请 此Unix代码从csv创建sql语句 cat $1 > po.lis while read filename; do insertval=$(echo $filename | sed "s/*//g;s/,/','/g;s/^/'/;

我正在通过Unix使用sqlplus将长数字从CSV导入Oracle数据库

我有数字

55000000024    55000000017
导入数据库时,它们显示为

5.5E+11    5.5E+11
谁能建议一种方法,我可以导入完整的数字请

此Unix代码从csv创建sql语句

    cat $1 > po.lis

while read filename; do
insertval=$(echo $filename | sed "s/*//g;s/,/','/g;s/^/'/;s/$/'/")
echo $insertval > $1

cat *.csv | tr -s ' ' | sed 's/^\(.*\)$/INSERT INTO USER.TMP_STYPO_IMPORT(L_BF_MAT_CHAR_VAL,L_EST_FCOST,L_EST_LCOST,L_SEASON,L_STY_NUM,L_STY_QUAL,L_STY_NAME,L_STY_TYPE,L_COMP_DIV,L_STY_RET_TYPE,L_STY_PDT_TYPE,L_PDT_CATEGORY,L_FS_GROUP,L_STY_CONTENT,L_STORAGE_TYPE,L_CON_NUM,L_CON,L_VAT_TYPE,L_BUY_OFFICE,L_PACK_TYPE,L_STY_TPRICE,L_STY_WEIGHT,L_STY_BARCODE1,L_STY_BARCODE2,L_STY_BARCODE3,L_STY_BARCODE4,L_STY_BARCODE5,L_STY_BARCODE6,L_STY_BARCODE7,L_STY_BARCODE8,L_STY_BARCODE9,L_STY_BARCODE10,L_STY_BARCODE11,L_STY_BARCODE12,L_UNIT_BARCODE_FMT,L_CUST_REF,L_PODATE,L_POQTY1,L_POQTY2,L_POQTY3,L_POQTY4,L_POQTY5,L_POQTY6,L_POQTY7,L_POQTY8,L_POQTY9,L_POQTY10,L_POQTY11,L_POQTY12,PO_WRK_UNIT_NUM,P_LSTY_SIZE,P_STY_COMP,P_COMP_EST_RATIO,P_COMP_EST_RATE,P_MAT_NUM,P_MONEY_SYMBOL,P_MONEY_RATE,P_COST_CODE,P_EST_MONEY_RATE,P_STY_STATE,P_MF_GROUP,P_SHIP_TYPE,P_MAIL_ORDER,P_PACK_PRODUCT,P_PACK_SOLID,P_UNIT_EAN_CHECK,P_PACK_EAN_CHECK,P_EGIFT_CARD,P_INCLUDE_IN_PROMOTIONS,P_SCAN_ENABLED,P_CARTON_TYPE,P_PACK_BARCODE_FMT,P_STOCK_KEEPING_PACK,P_PRICE_LIST,P_ACTIVE,P_STY_SIZE,P_PDT_CATEGORY) VALUES(\1);/' > $1.sql
这是进口使用

    ORACLE_HOME=/###/###
export ORACLE_HOME
ORACLE_SID=#
export ORACLE_###

rm /###/###/stypo.log

rundir="/###/###/Import_Test/*csv.sql"
ls -1 $rundir > sqltorun.list

while read p; do

$ORACLE_HOME/###/sqlplus user/pswrd @./###/###/Import_Test/$p << EOF >> /###/###/stypo.log
exit
EOF

done < sqltorun.list
ORACLE\u HOME=/###/###
导出甲骨文主页
甲骨文=#
导出ORACLE_###
rm/####/######/stypo.log
rundir=“/###/######/Import#u Test/*csv.sql”
ls-1$rundir>sqltorun.list
读p;做
$ORACLE#U HOME/########/sqlplus user/pswrd@/#####/#####/stypo.log
出口
EOF
完成

谢谢,

5.5E+11=55000000000,因此如果CSV中是这样的话,那么导出过程已经失去了一些精度。显然,SQL无法确定是否缺少一个24。无论是谁从Access导出,都需要查看该列。

该列的数据类型是什么?它是一个VARCHAR数据类型,因此,尝试将其更改为数字似乎令人尴尬。嗯,奇怪的是,它会被转换为科学符号(除非bash比我意识到的更聪明)。它们肯定像原始csv中的“55000000024”?像Excel这样的应用程序通常会正常显示数字,但当您以csv格式导出时,可能会转换为科学符号。该文件已从Access系统导出,并作为csv文件发送给我。在Unix中查看csv时,它显示5.5E+11。将数据类型更改为number是有帮助的,但它显示的是55000000000而不是550000024。在导入工作之前,是否需要对文件执行其他操作?您必须从access重新导入,并特别注意定义输出列格式。对不起,我这么做已经很多年了,所以我不能提供建议。这现在是一个访问问题。最好使用访问标签重新构建和重新发布。好运气的家伙们,这真的帮了我的忙。干杯