+ -
当前位置:首页 → 问答吧 → shell 执行sql语句,如何把返回记录放到数组中?

shell 执行sql语句,如何把返回记录放到数组中?

时间:2011-01-24

来源:互联网

  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%';"
复制代码
本人最终目标希望数组每个元素存放一个字段的值。如果使用空格做分隔符的话,可能有些记录本身就包含空格,故根据空格分隔返回字符串可能得不到正确结果。
大伙有什么好的方法没?

作者: tgnian   发布时间: 2011-01-24

回复 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 各是数组单独的一项,关注中

作者: youcz   发布时间: 2011-01-25

把结果导到文件中在读取,这个方法比较简单。我在db2下这么做的。

作者: java_html   发布时间: 2011-01-25

是在抱歉,看不懂lz的意思,但是,大致的出一主意:

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

LZ可以尝试一下...

作者: 南极雨   发布时间: 2011-01-25