要求
我需要将文本文件值添加到数据库中。
下面是我的shell脚本
#!/bin/bash
DB_USERNAME='xxx'
DB_PASSWORD='xxxx'
DB_HOST='xxxx'
DB_PORT=xxx
DB_SERVICE='xxxx'
DB_CONNECTION=$DB_USERNAME/$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_SERVICE
echo $DB_CONNECTION
while read f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 f21 f22 f23 f24 f25 f26 f27
do
sqlplus -s $DB_CONNECTION <<EOF
insert into GPRS_FILTER_TABLE_2 values($f1,$f2,(TO_DATE($f3,'YYYY-MM-DD HH24-MI-SS')),$f4,$f5,$f6,$f7,$f8,$f9,$f10,$f11,$f12,$f13,$f14,$f15,$f16,$f17,$f18,$f19,
$f20,$f21,$f22,$f23,$f24,$f25,$f26,$f27);
commit;
EOF
done < /home/work/test.txt
exit
这是 test.txt 文件值
'2341212121212' '17' '2020/05/25-15-55-03' NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL '33312212' 'vpn' '785' '0' NULL NULL NULL 'AUSTA' NULL '0' '39' 'ZBRCT1121300000001' 'Roaming GPRS' '223333'
我遇到以下错误
insert into GPRS_FILTER_TABLE_2 values('Roaming,GPRS',(TO_DATE('357217094875381','YYYY-MM-DD HH24-MI-SS')),,,,,,,,,,,,,,,,,
*
ERROR at line 1:
ORA-00936: missing expression
似乎 text.txt 中的第二行作为新行。
答案1
在您的脚本中,如果您替换sqlplus -s $DB_CONNECTION
为cat
,您会看到问题:
xxx/xxxx@xxxx:xxx/xxxx
insert into GPRS_FILTER_TABLE_2 values('2341212121212','17',(TO_DATE('2020/05/25-15-55-03','YYYY-MM-DD HH24-MI-SS')),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'33312212','vpn','785','0',NULL,NULL,
NULL,'AUSTA',NULL,'0','39','ZBRCT1121300000001','Roaming,GPRS' '223333');
该read
语句不考虑源数据文件中的引号,因此'Roaming
它本身就是一个值。通常GPRS'
会是下一个,但因为没有其他变量可以接收输入,所以最后一个变量被赋予该行的整个剩余部分,GPRS' '223333'
。
对于您的问题中显示的问题没有简单的解决方案;更多的是围绕不变量进行重新架构。理想情况下,可以更改数据文件,以便您不使用与数据中相同的字符(空格)来分隔值。