【发布时间】:2014-05-16 14:06:10
【问题描述】:
我正在通过 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
谢谢,
【问题讨论】:
-
列是什么数据类型?
-
这是一个 VARCHAR 数据类型,这样一来,尝试将其更改为 NUMBER 似乎很尴尬。
-
嗯,奇怪的是它会被转换为科学记数法(除非 bash 比我意识到的更聪明)。他们肯定像原始csv中的'55000000024'? Excel 等应用程序通常会正常显示数字,但在导出为 csv 时可能会转换为科学计数法。
-
道歉。该文件已从 Access 系统导出并作为 csv 文件发送给我。当我在 Unix 中查看 csv 时,它显示 5.5E+11。将数据类型更改为数字很有帮助,但它显示 55000000000 而不是 550000024。在导入工作之前我需要对文件做些什么吗?
-
您必须从访问中重新导出,并特别注意定义输出列格式。对不起,自从我这样做以来已经有很多年了,所以我无法提供建议。现在这是一个访问问题。最好使用 Access 标签重新构建和重新发布。祝你好运
标签: bash unix ms-access csv export-to-csv