用数组插入数据库,不识别的问题
beauty2003
用数组插入数据库,不识别的问题
代码如下:
#!/bin/sh
i=0
cd /home/cjtest/gy/job/jbyysh
cat *.txt >$(data -d"-1day" +"%Y%m%d")sh.txt
/********************************************/
#数据获取部分代码
for line in `more $(data -d"-1day" +"%Y%m%d")sh.txt`
do
switch_id[$i]=$(echo $line|awk -F/| '{print $1}')
process_name[$i]=$(echo $line|awk -F/| '{print $2}')
billdate[$i]=$(echo $line|awk -F/| '{print $3}')
oldnum[$i]=$(echo $line|awk -F/| '{print $4}')
newnum[$i]=$(echo $line|awk -F/| '{print $5}')
diffnum[$i]=$(echo $line|awk -F/| '{print $6}')
#echo "${switch_id[$i]} ${process_name[$i]} ${billdate[$i]} ${oldnum[$i]} ${newnum[$i]} ${diffnum[$i]}"
i=$(($i+1))
done
/*********************************************/
sqlplus fjzhcj/fjzhcj@server.LOCALDOMAIN <<EOF
insert into gydata_info values('${switch_id[$i]}','${process_name[$i]}','${billdate[$i]}',${oldnum[$i]},${newnum[$i]},${diffnum[$i]});
commit;
exit
EOF
exit 0
调试部分:
Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production
SQL> insert into gydata_info values('''','','',,,)
*
ERROR at line 1:
ORA-00936: missing expression
SQL>
Commit complete.
问题:
数组变量在插入数据库时,都没被识别出来.
beauty2003
如果是具体指定数组变量,是可以正常插入的,如下代码:
sqlplus fjzhcj/fjzhcj@server.LOCALDOMAIN <<EOF
insert into gydata_info values('${switch_id[2]}','${process_name[2]}','${billdate[2]}',${oldnum[2]},${newnum[2]},${diffnum[2]});
commit;
exit
EOF
nuclearxin
'${switch_id[2]}'
there will be something wrong with the fucking 'quote'~~
beauty2003
我现在是想每次读取文本中的一行,然后循环插入数据库,请问下大家,这个有什么好的办法?总不可能,每次都要重新连接数据库,再断开吧.
waker
如果你给你的数据文件和要求,可能其它人会提供更好的思路
大大狗
插入的表达式不正确
还有用 " " 双引号试一下
beauty2003
[quote]原帖由 [i]waker[/i] 于 2008-7-1 09:35 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8707743&ptid=1185325][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
如果你给你的数据文件和要求,可能其它人会提供更好的思路 [/quote]
数据源文件(如下形式):
4403|cjftp-fs_ftp|20080629|287|287|0
4402|cjftp-put_bs|20080629|287|287|0
3606|cjftp-c08_zp|20080629|1463|1463|0
3601|cjftp-c08_yx|20080629|870|870|0
.
.
要求:
将文本中的每行数据都插入到一张表里,至于列就是以分隔符分开的.
beauty2003
补充一下:
每天都有这样一个文本文件,需要插入到这张表里.
beauty2003
[quote]原帖由 [i]大大狗[/i] 于 2008-7-1 09:48 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8707874&ptid=1185325][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
插入的表达式不正确
还有用 " " 双引号试一下 [/quote]
插入的表达式不正确??什么地方错了?
" "试过了,不加' 和"也试过了,如果是用insert into gydata_info values(${switch_id[$i]},${process_name[$i]},${billdate[$i]},${oldnum[$i]},${newnum[$i]},${diffnum[$i]});这种形式,始终是无法认到:
如下提示:
SQL> insert into gydata_info values(,,,,,)
*
ERROR at line 1:
ORA-00936: missing expression
waker
[code]sed "1i /
insert into gydata_info
s/^/values('/;s/|/,/;s//$/);/
/$ a /
commit//
exit
" urfile|sqlplus fjzhcj/fjzhcj@server.LOCALDOMAIN
[/code]
beauty2003
[quote]原帖由 [i]waker[/i] 于 2008-7-1 10:30 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8708416&ptid=1185325][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
sed "1i /
insert into gydata_info
s/^/values('/;s/|/,/;s//$/);/
/$ a /
commit//
exit
" urfile|sqlplus fjzhcj/fjzhcj@server.LOCALDOMAIN
[/quote]
waker你是想把那个文本中的语句全部替换成插入语句是吧.
我试了下你的命令,没通过啊.
代码部分:
sed "1i /
insert into gydata_info
s/^/values('/;s/|/,/;s//$/);/
/$ a /
commit//
exit
" $(date -d"-1day" +"%Y%m%d")sh.txt|sqlplus fjzhcj/fjzhcj@server.LOCALDOMAIN
调试部分:
SQL> 2 ERROR:
ORA-01756: quoted string not properly terminated
SQL> SP2-0734: unknown command beginning "values('44..." - rest of line ignored.
SQL> SP2-0734: unknown command beginning "values('36..." - rest of line ignored.
SQL> SP2-0734: unknown command beginning "values('36..." - rest of line ignored.
SQL> SP2-0734: unknown command beginning "values('36..." - rest of line ignored.
SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT.
....
beauty2003
再发下,要入库的文本问件:
4403|cjftp-fs_ftp|20080629|287|287|0
4402|cjftp-put_bs|20080629|287|287|0
3608|cjftp-c08_ct|20080629|1216|1216|0
3603|cjftp-c08_ds|20080629|1315|1315|0
3607|cjftp-c08_ha|20080629|1219|1219|0
3604|cjftp-c08_lh|20080629|1362|1362|0
3605|cjftp-c08_nj|20080629|1259|1259|0
3601|cjftp-c08_yx|20080629|870|870|0
beauty2003
waker:
能不能把你这段代码替换后的结果发给我下,
/****************************/
sed "1i /
insert into gydata_info
s/^/values('/;s/|/,/;s//$/);/
/$ a /
commit//
exit
" urfile
/*********************/
waker
[code][waker@proxy ~]$ sed "1i /
insert into gydata_info
s/^/values('/;s/|/','/g;s//$/');/
/$ a /
commit//
exit
" urfile
insert into gydata_info
values('4403','cjftp-fs_ftp','20080629','287','287','0');
values('4402','cjftp-put_bs','20080629','287','287','0');
values('3606','cjftp-c08_zp','20080629','1463','1463','0');
values('3601','cjftp-c08_yx','20080629','870','870','0');
commit
exit
[/code]
waker
别外数据库都会有导入txt的接口,查查手册吧
beauty2003
[quote]原帖由 [i]waker[/i] 于 2008-7-1 12:02 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8709624&ptid=1185325][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
[waker@proxy ~]$ sed "1i /
insert into gydata_info
s/^/values('/;s/|/','/g;s//$/');/
/$ a /
commit//
exit
" urfile
insert into gydata_info
values('4403','cjftp-fs_ftp','20080629 ... [/quote]
waker :
:mrgreen: ,应该每行都有自己的insert into 语句吧.
还有能不能解释下,
s/^/values('/;s/|/','/g;s//$/');/
这句话中'/;和s//$/'这两个是什么意思?
beauty2003
哦,s//$/'这个应该是将最后替换出个' 吧
这个'/;还是没理解.