korpus 发表于 2010-11-16 23:48

问下脚本调用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那么做呢?

yunzhongyue 发表于 2010-11-17 09:52

觉得你把SHELL和SQL搞混了,dbaccess里是运行SQL的,不可以执行SHELL!

liaosnet 发表于 2010-11-17 10:07

这3种方式用在shell里,输出的结果应该没什么差别。
只是你的第一个不是被认可的,因为dbaccess之间使用的是 SQL,而不可在里面使用shell操作。

korpus 发表于 2010-11-17 11:37

本帖最后由 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。

liaosnet 发表于 2010-11-17 12:49

额~刚回答也许有些问题。。
-- 这里接在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

korpus 发表于 2010-11-25 09:30

谢谢暗夜,忘记来感谢你了。。这几天一直比较忙,没有上。
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命令?这样会报语法错呢

liaosnet 发表于 2010-11-25 12:10

谢谢暗夜,忘记来感谢你了。。这几天一直比较忙,没有上。
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]
查看完整版本: 问下脚本调用INFORMIX执行时的若干疑问?