免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4136 | 回复: 6
打印 上一主题 下一主题

问下脚本调用INFORMIX执行时的若干疑问? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-16 23:48 |只看该作者 |倒序浏览
本帖最后由 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那么做呢?

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
2 [报告]
发表于 2010-11-17 09:52 |只看该作者
觉得你把SHELL和SQL搞混了,dbaccess里是运行SQL的,不可以执行SHELL!

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2010-11-17 10:07 |只看该作者
这3种方式用在shell里,输出的结果应该没什么差别。
只是你的第一个不是被认可的,因为dbaccess之间使用的是 SQL,而不可在里面使用shell操作。

论坛徽章:
0
4 [报告]
发表于 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。

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
5 [报告]
发表于 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

论坛徽章:
0
6 [报告]
发表于 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命令?  这样会报语法错呢

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
7 [报告]
发表于 2010-11-25 12:10 |只看该作者
谢谢暗夜,忘记来感谢你了。。这几天一直比较忙,没有上。
while read LINE
do
        A1=bb   bb从LIN ...
korpus 发表于 2010-11-25 09:30



    谁让你把这个shell存为sql文件了?没看到 echo 最后的重定向?那个才是生成sql文件。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP