问下脚本调用INFORMIX执行时的若干疑问?
本帖最后由 korpus 于 2010-11-17 11:26 编辑系统:AIX
在一个执行文件里使用INFORMIX语句时 可以使用 一下几种方式
dbaccess database --<<!
!
dbaccess database - -<<!
!
dbaccess database <<!
!
请问这不同的有什么区别呢?
其它疑问
情况1:
dbaccess database --<<!
while read LINE
do
A1=bb bb从LINE里面得到
A2=cc cc从LINE里面得到
update temp set ee=$A1 where ff=$A2;
done < file
!
这样更新不了数据,这是为什么呢? 而且好像循环都进不了
情况2:
while read LINE
do
A1=bb bb从LINE里面得到
A2=cc cc从LINE里面得到
dbaccess database - - <<!
update temp set ee=$A1 where ff=$A2;
!
done < file
这样做可以,但是循环的打开数据库,太慢了。
如何才能像情况1那么做呢? 觉得你把SHELL和SQL搞混了,dbaccess里是运行SQL的,不可以执行SHELL! 这3种方式用在shell里,输出的结果应该没什么差别。
只是你的第一个不是被认可的,因为dbaccess之间使用的是 SQL,而不可在里面使用shell操作。 本帖最后由 korpus 于 2010-11-17 11:38 编辑
谢谢3楼,能在看看么?
我主要是想要完成这个操作
dbaccess database --<<!
while read LINE
do
A1=bb bb从LINE里面得到
A2=cc cc从LINE里面得到
update temp set ee=$A1 where ff=$A2;
done < file
!
这种情况,不会报错,但是却没有执行
dbaccess database - -<<!
while read LINE
do
A1=bb bb从LINE里面得到
A2=cc cc从LINE里面得到
update temp set ee=$A1 where ff=$A2;
done < file
!
这种方式会报错,可能就是3楼说的SQL里面不能执行SHELL
我想要做的很简单,就是希望在循环外面打开数据库,然后从文件里面取字段去更新。重复打开数据库会占用很多时间。客户不能接受。
那我应该怎么做呢?
可以把数据LOAD到临时表再做更新(这种我知道)
A=0
dbaccess middb - -<<!
!A=1
!echo $A
!
echo $A
这种测试A的值并没有变化任然是0。 额~刚回答也许有些问题。。
-- 这里接在dbaccess database 后直接进入库,等待从标准输入;
- - 这里的第一个 - 表示进入交互模式,第二个输入,由于没有具体的输入,可忽略;
- 一个 - 就表示交互。
故使用-- 时可以执行但不报错,是因为压根没执行重定向中的语句!
!A=1 这样的,是相当于子进程中中执行这条语句而已,并不会传送给父进程。这是进程父子的概念。
如果要完成你的需求,你可以使用shell生成个sql文件,然后使用dbaccess调用即可。。
while read LINE
do
A1=bb bb从LINE里面得到
A2=cc cc从LINE里面得到
echo 'update temp set ee="'$A1'" where ff="'$A2';' >> ufile.sql
done < file
dbaccess database ufile.sql
谢谢暗夜,忘记来感谢你了。。这几天一直比较忙,没有上。
while read LINE
do
A1=bb bb从LINE里面得到
A2=cc cc从LINE里面得到
echo 'update temp set ee="'$A1'" where ff="'$A2'";'
done < file
上面的while存为ufile.sql 文件
然后在执行 dbaccess database ufile.sql命令?这样会报语法错呢 谢谢暗夜,忘记来感谢你了。。这几天一直比较忙,没有上。
while read LINE
do
A1=bb bb从LIN ...
korpus 发表于 2010-11-25 09:30 http://bbs.chinaunix.net/images/common/back.gif
谁让你把这个shell存为sql文件了?没看到 echo 最后的重定向?那个才是生成sql文件。。。
页:
[1]