免费注册 查看新帖 |

Chinaunix

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

shell 执行sql语句,如何把返回记录放到数组中? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-24 23:07 |只看该作者 |倒序浏览
  1. #!/bin/sh

  2. result=`mysql  -s -N -e "select id,name from t_info where name like 'happy%';"
复制代码
以上语句返回的是一个字符串。
有啥方法使得result为数组,该数组每个元素为一条记录?  本人试了以下语句,还是不行,显示只有一个元素,该元素包含所有记录。

  1. declare -a result=`mysql  -s -N -e "select id,name from t_info where name like 'happy%';"
复制代码
本人最终目标希望数组每个元素存放一个字段的值。如果使用空格做分隔符的话,可能有些记录本身就包含空格,故根据空格分隔返回字符串可能得不到正确结果。
大伙有什么好的方法没?

论坛徽章:
0
2 [报告]
发表于 2011-01-25 10:19 |只看该作者
回复 1# tgnian


    [root@test2 youcz]# aa=(`/usr/local/mysql/bin/mysql -sN -S /tmp/mysql_yuhj.sock test -e "select name from aaa_his;"`)
[root@test2 youcz]# echo ${aa[@]}
4444444444444 3333333333333 222222222222 111111111111 55555555555555555 6666666666666666666 7777777777777777777777 88888888888888888888888 9999999999999999999999999 10101010101010101010101010 aa bb cc

mysql> select * from aaa_his;
+------+----------------------------+
| id   | name                       |
+------+----------------------------+
| 4    | 4444444444444              |
| 3    | 3333333333333              |
| 2    | 222222222222               |
| 1    | 111111111111               |
| 5    | 55555555555555555          |
| 6    | 6666666666666666666        |
| 7    | 7777777777777777777777     |
| 8    | 88888888888888888888888    |
| 9    | 9999999999999999999999999  |
| 10   | 10101010101010101010101010 |
| 11   | aa bb cc                   |
+------+----------------------------+
11 rows in set (0.00 sec)


没有完全解决 aa bb cc 各是数组单独的一项,关注中

论坛徽章:
0
3 [报告]
发表于 2011-01-25 10:26 |只看该作者
把结果导到文件中在读取,这个方法比较简单。我在db2下这么做的。

论坛徽章:
0
4 [报告]
发表于 2011-01-25 10:33 |只看该作者
是在抱歉,看不懂lz的意思,但是,大致的出一主意:

id,name 中间放两个空格:id , name 仍然以空格作为分隔符,使用awk 中的split函数默认区分成数组,看看此方法能不能实现楼主的想法?
例子:awk ‘BEGIN {print split(“123#456#789”,myarry,”#”)}’
在这里,默认划分成数组:myarray[1]=123 ....

LZ可以尝试一下...

论坛徽章:
0
5 [报告]
发表于 2011-01-25 12:25 |只看该作者
回复 3# java_html

如果sql为select name,address form t_info where name like 'happ%’;
得出结果的某些字段有空格为
happy li  street one
happily lin guangdong

你怎么知道 li,lin 是属于第一个字段name,还是第二个字段address?

论坛徽章:
0
6 [报告]
发表于 2011-01-25 12:32 |只看该作者
回复 4# 南极雨
可看成两个问题
(1)我知道在perl中@result=`mysql  -s -N -e "select id,name from t_info where name like 'happy%';`;
结果数组result每个元素为一行记录。我不知道在shell中有没有类似语意?

(2)select id,name from t_info where name like 'happy%';
如得到
happyy li  street one
happily lin guangdong
我最终目的是result[0]="happyy li" result[1]="street one" result[0]="happily lin" result[0]="guangdong"
不知有什么好的方法没(不一定使用数组,关键是能方便地得到某个字段值)?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2011-01-25 12:38 |只看该作者
bash
a=($(urcmd))

论坛徽章:
0
8 [报告]
发表于 2011-01-25 13:16 |只看该作者
bash
a=($(urcmd))
cjaizss 发表于 2011-01-25 12:38



这个不行,记录有空格,还是用perl导下吧,如果必须用shell的话

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2011-01-25 13:23 |只看该作者
这个不行,记录有空格,还是用perl导下吧,如果必须用shell的话
youcz 发表于 2011-01-25 13:16



    记录有空格?什么意思?

论坛徽章:
0
10 [报告]
发表于 2011-01-25 13:33 |只看该作者
perl DBI模块,妥妥的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP