用数组插入数据库,不识别的问题

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

nuclearxin
/'

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
改了一下,是不是这样的

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//$/'这个应该是将最后替换出个' 吧
这个'/;还是没理解.