免费注册 查看新帖 |

Chinaunix

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

请教,shell如何取得sql执行的返回值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-19 18:27 |只看该作者 |倒序浏览
在sehll脚本中,有如下sql语句
select count(*) from A
insert into B select * from A;
当上面的sql执行后,接下来处理上面的返回值,该怎么取啊

如select查询记录数,insert 插入的记录数?用shell怎么得到呢

论坛徽章:
0
2 [报告]
发表于 2011-08-19 18:34 |只看该作者
回复 1# angel518


    mysql -uroot -p**** -e "select count(*) from A" |wc -l

论坛徽章:
0
3 [报告]
发表于 2011-08-19 19:49 |只看该作者
回复 1# angel518

sqlplus ...  <<EOF

spool a.txt
select   * from tab;
spool off
EOF

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2011-08-19 21:03 |只看该作者
获取结果:

  1. return_value=$(mysql -u用 -p密码 -h主机 -e "select count(*) from A;")
复制代码
但如果是 insert 则无法得到结果,因为本身没有输出。要借助其它工具了,3#的工具没见过,可能很好用,改天试用试用。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2011-08-19 23:34 |只看该作者
回复 4# seesea2517


Oracle的客户端命令sqlplus

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
6 [报告]
发表于 2011-08-20 10:44 |只看该作者
回复  seesea2517


Oracle的客户端命令sqlplus
Shell_HAT 发表于 2011-08-19 23:34



    有道理啊,LZ还没说是什么服务器呢~

论坛徽章:
0
7 [报告]
发表于 2011-08-20 11:30 |只看该作者
忘了说,是ORACLE
我代码如下:
RET=`sqlplus -s user/passwd <<EOF
insert into B select * from A;
COMMIT;
EOF`
echo $RET

sqlplus -s user/passwd <<EOF
select count(*) from A
EOF
RETN="$?"
echo $RETN
第一个显示空白,第二个返回0,实际插入了几条啊
哪里有错???

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2011-08-20 12:55 |只看该作者
回复 7# angel518


把SQL的执行spool到一个文件里面,然后读这个文件。

论坛徽章:
0
9 [报告]
发表于 2011-08-20 13:29 |只看该作者
其实用Perl DBI模块来做这些数据库查询,修改还是很方便的,比直接用shell好控制一点。

论坛徽章:
0
10 [报告]
发表于 2011-08-20 22:01 |只看该作者
--oracle
#!/bin/bash
user=aaa
password=bbb
tns=ccc

result=`sqlplus -S $user/$password@$tns<<EOF
select count(1) from tb;
EOF`

echo $result
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP