use chbdb;
CREATE TABLE user (
id varchar(36) NOT NULL COMMENT '主键',
username varchar(50) NOT NULL COMMENT '用户名',
password varchar(50) NOT NULL COMMENT '用户密码',
createdate date NOT NULL COMMENT '创建时间',
age int(11) NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
优点:
1>支持复杂的sql脚本
2>无需其它额外文件
缺点:
1> 表名、字段不能使用单引号,需要修改原有sql语句
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案4
准备一个sql脚本,如update.sql,然后执行如下命令:
mysql -uroot -ppassword < update.sql
优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但
是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢。
大家好:
我是一位shell菜鸟,问各位一个问题,还望各位多指教!
请问如何将一个sql查询语句的某一列值赋给一个shell变量,麻烦各位给出详细代码参考下。
在线等,谢谢!
对我有用[0]丢个板砖[0]引用举报管理TOP 回复次数:2
shihezichen
(编程量子)
等 级:
#1楼 得分:20回复于:2008-10-31 23:27:03
你可以把sql执行结果先存入到临时文件中,然后再从中间取出你所需的那一行,赋给shell变量.
假设sql执行结果存入已存入文件/tmp/sql_out.txt, 要取其中的第 51 行, 以ksh为例如下:
Python code
out_f="/tmp/sql_out.txt"
line_count=51
line=""
# get the line 51 and assigned it to $line
line=`sed -n "${line_count}p" ${out_f}`
# show the line
echo ${line}
[shell] SHELL怎样像游标一样对SQL查询结果集进行循环? [复制链接]
Rawu
临时会员
该用户从未签到
阅读权限10 积分0 主题15 帖子54 日志0
楼主
发表于 2005-5-26 18:34 |只看该作者 |倒序浏览 |打印
SHELL怎样像游标一样对SQL查询结果集进行循环?
比如 select A,B,C,count(1) AS D from table group by A,B,C
结果是
A B C D
----------
1 5 Q 3
2 6 W 3
3 7 R 4
4 8 T 5
现在如果想像游标一样一行一行的获取A,B,C,的值
再用这些值组合成命令运行,
知道所有行都处理完毕为止,那么 该怎么实现?
我的做法是先把结果集定向到一个文件
再用 while [ $# -gt 0] 作循环
分别用
a=`awk {print $1} file`
b=`awk {print $2} file`
c=`awk {print $3} file`
获取每行的变量值
但每个变量获取的却是整个列的值。
哪位DX 指教一下
收藏0 分享0 支持0 反对0
回复 引用 举报 返回顶部
dradhzn
临时会员
该用户从未签到
阅读权限10 积分15 主题2 帖子491 日志0
沙发
发表于 2005-5-26 23:39 |只看该作者
SHELL怎样像游标一样对SQL查询结果集进行循环?
#!/bin/sh
while read line
do
set $line
echo $1 $2 $3 $4
echo =do sth here===
echo =done, next line=
echo
done < urfile
回复 引用 举报 返回顶部
随风漂
临时会员
该用户从未签到
阅读权限10 积分0 主题20 帖子455 日志0
板凳
发表于 2005-5-27 08:56 |只看该作者
SHELL怎样像游标一样对SQL查询结果集进行循环?
可是用使用awk和sh来完成,举例说明:
awk '{print "yourcode",$1,$2}' filename|sh
回复 引用 举报 返回顶部
ldchope
一星会员
该用户从未签到
阅读权限25 积分222 主题22 帖子132 日志0
4楼
发表于 2005-5-27 14:07 |只看该作者
SHELL怎样像游标一样对SQL查询结果集进行循环?
#!/bin/sh
n=1
# export n
m=`awk 'END {print NR }' readme`
echo $m, $n
while [ $n -le $m ]
do
line=`awk '{ if ( NR == '"$n"' ) print}' readme`
a=`echo $line|awk '{print $1}'`
b=`echo $line|awk '{print $2}'`
c=`echo $line|awk '{print $3}'`
d=`echo $line|awk '{print $4}'`
echo "$a,$b,$c,$d"
n=`expr $n + 1 `
sleep 5
done
前一阵子写的,你应该用的上
回复 引用 举报 返回顶部
Rawu
临时会员
该用户从未签到
阅读权限10 积分0 主题15 帖子54 日志0
5楼
发表于 2005-5-29 02:11 |只看该作者
SHELL怎样像游标一样对SQL查询结果集进行循环?
谢谢 各位 ,我先试试。
check_db.sh
sqlplus test/test@testDB<
SELECT tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间 FROM dba_free_space GROUP BY tablespace_name;
exit
!
怎么在check_db.sh中取到 表空间和 剩余空间 的值?
然后放在某个变量中
HP StoreOnce重复数据删除白皮书下载| 2010您最想感谢的CUer是谁?敬请提名! | 红帽RHCE超低价考试| 有奖:数据保护什么备份软件好
silverdust
圣骑士
帖子128 主题13 精华0 可用积分128 专家积分0 (本版:0)来自北京西城 在线时间14 小时 注册时间2002-08-08 最后登录2010-12-20
状态:...当前离线...
[微博] [博客] [短信]
2楼 发表于 2006-05-29 17:06 | 只看该作者
把查询结果unload到文件里,然后cat文件,用awk取不同域的值赋给变量
__________________________________
鹤舞白沙,我心飞翔!
HP StoreOnce重复数据删除白皮书下载| 2010您最想感谢的CUer是谁?敬请提名! | 红帽RHCE超低价考试| 有奖:数据保护什么备份软件好
西门子
风云使者
帖子457 主题84 精华1 可用积分468 专家积分0 (本版:0)在线时间7 小时 注册时间2005-03-02 最后登录2010-12-09
状态:...当前离线...
[微博] [博客] [短信]
3楼 发表于 2006-05-29 17:07 | 只看该作者
var=$(sql command)
echo $var
__________________________________
什么是 Windows 能干而 Linux 干不了的事情?----Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。
HP StoreOnce重复数据删除白皮书下载| 2010您最想感谢的CUer是谁?敬请提名! | 红帽RHCE超低价考试| 有奖:数据保护什么备份软件好
fjfd
圣骑士
帖子105 主题17 精华0 可用积分115 专家积分0 (本版:0)在线时间36 小时 注册时间2004-07-23 最后登录2010-06-26
状态:...当前离线...
[微博] [博客] [短信]
4楼 发表于 2006-05-29 19:23 | 只看该作者
QUOTE:
原帖由 西门子 于 2006-5-29 17:07 发表
var=$(sql command)
echo $var
好象是行不通的哦
可否用SHELL实现对SQL进行查询,修改,删除等等呢
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 08:00:00
域名注册
域名惊喜价格 cn域名1元注册
com域名39.9元
虚拟主机
主机按月支付,低至19元/月
超大流量,可开子站点
VPS主机
特惠VPS168元/月,4-8M独享带宽保证
独立操作系统,无限开站点
#!/usr/bin/ksh
SQL_EXEC()
{
sqlplus $USER/$PASSWD@$DB<
set linesize 1024
set pagesize 1024
$SQLCOMM
quit
!
}
#select
SQLCOMM="select ’xxx’,username from all_users;"
SQL_EXEC | grep xxx
#insert ,delete 省略
用的INformIX哟提示未找到sql_exec怎么办。
我想这样应该能,
#vi query.sh
sqlplus $USER/$PASSWD << EOF
select …… from …………
insert………………
delete………………
EOF
:wq
#query.sh
isql<
database dbname;
select * from tbname where fieldname="xxxxx";
delete from tbname;
.....
close database;
!
可否用SHELL实现对SQL进行查询,修改,删除等等呢
创建:2005-10-26 00:49:46
作者:Unlinux
来自:
#!/usr/bin/ksh
SQL_EXEC()
{
sqlplus $USER/$PASSWD@$DB<
set linesize 1024
set pagesize 1024
$SQLCOMM
quit
!
}
#select
SQLCOMM="select 'xxx',username from all_users;"
SQL_EXEC | grep xxx
#insert ,delete 省略
用的INformIX哟提示找不到sql_exec怎么办。
我想这样应该可以,
#vi query.sh
sqlplus $USER/$PASSWD << EOF
select …… from …………
insert………………
delete………………
EOF
:wq
#query.sh
isql<
database dbname;
select * from tbname where fieldname="xxxxx";
delete from tbname;
.....
close database;
!
转载自:
把SQL查询结果赋给shell变量
时间:2010-10-13 01:09 来源: 作者: 点击:85次
最近在看《基于Linux的Oracle数据库管理》这本书,根据书上的示例写的shell脚本, #!/bin/bash VALUE=`sqlplus -silent /nolog END conn scott/tiger set pagesize 0 feedback off verify off heading off echo off numwidth 4 select count( * ) coun from
最近在看《基于Linux的Oracle数据库管理》这本书,根据书上的示例写的shell脚本,
#!/bin/bash
VALUE=`sqlplus -silent /nolog <
conn scott/tiger
set pagesize 0 feedback off verify off heading off echo off numwidth 4
select count( * ) coun from all_objects;
exit;
END`
if [ "$VALUE" -gt 0 ]
then
echo "The number of rows is $VALUE."
exit 0
else
echo "There is no row in the table."
fi
在执行时总报错误:
./sqlshell.sh: line 9: [: ####: integer expression expected
书上写的应该没错,查找原因,看了一上我机器上的查询结果是:40620
应该是显示的位宽不够,所以"$VALUE"值变成了一个错误的值。
把numwidth 4 改成为 numwidth 5
就能正确执行了。
想写个shell脚本,获取到SQL中查询到的字段的值enabledate,赋值给shell脚本中定义的变量,然后再写入文件du.txt中.
我已经写了如下代码:
isql <
database checkid;
select enabledate from cachet where
accno = '900116004';
!
echo $@ > du.txt
接下来就不会写了,求大家帮帮忙啊!
问题补充:
能不能写详细点,谢谢啦
我是这样写的,你看对不对
isql <
database checkid;
select enabledate from cachet where accno ='900116004';
!
while read enabledate
do
aa=$enabledate;
done
echo "$aa";
最佳答案
while read enabledate
do
__aa=$enabledate;
done
echo "$__aa";
============================
我用shell调用 一个sql 文件,这个sql文件里面的查询豫剧返回一个结果集
我如何把这个结果集返回给shell
悬赏金额: N币 20
悬赏的问题解决办法
TOP
tueensc
tueensc
组别新进职员
性别保密
积分80
帖子10984
注册时间 2010-01-12
2009-01-23 00:32 |只看该用户 2# 字体大小:
ri。。也不说是什么数据库。
如果书sybase可以有两个方式:
isql -S.. -U.. -P.. <
select * from ..
go
exit
EOF
或者再shell执行像下面语句,然后通过管道送到其它程序或者重定向到文件:
isql -S.. -U.. -P.. -i跟上sql文件名
如果书oracle或mysql,至少第一种方法是可以的。
TOP
javaccto
javaccto
组别新进职员
性别保密
积分80
帖子11607
注册时间 2010-01-12
2009-01-23 14:29 |只看该用户 3# 字体大小:
楼上正解
TOP
cotomen
cotomen
组别新进职员
性别保密
积分80
帖子12847
注册时间 2010-01-12
2010-01-16 11:01 |只看该用户 4# 字体大小:
Execute_SQL()
{
isql -Uuser -Ppasswrok -Sserverid <
${SQL}
go
exit
go
!
}
SQL=`echo "select convert(varchar(20),dateadd(day,-1,getdate()),112) ,'aaa' "`
Execute_SQL |grep aaa |read yestoday aaa
python的base64编码图片
Python 2010-06-26 12:07:36 阅读162 评论0 字号:大中小 订阅
很多年以前,曾经保存过一个页面,但发现图片并没有以文件的形式保存下来,打开页面时图片却有显示,
开始以为是js玩的花招(因为里面一大堆js跳来跳去),链接到了其它地方,调查后发现源代码里有一大段看不懂的编码,
虽然估计这段代码就是图片,受限于当时的视野,百思不得其解~
现在终于明白了!
测试例子,把文字转成base64编码
>>> import base64
>>> ls_s='字符串文本'
>>> ls_t=base64.b64encode(ls_s) #转换文本内容到base64
>>> print ls_t
19a3+7SuzsSxvg==
>>> print base64.b64decode(ls_t) #解码
字符串文本
>>>
把图片内容转成base64编码
import base64
f=open(r'x:\1.jpg','rb') #二进制方式打开图文件
ls_f=base64.b64encode(f.read()) #读取文件内容,转换为base64编码
f.close()
把编码文本写入一个txt文件
fw=open(r'x:\1.txt','w') #打开一个空白文本文件,准备写入
fw.write(ls_f)
fw.flush()
fw.close()
网页的表达
注意 image/jpeg 如果图片是其它类型的,这里也要修改; image/png、image/gif、image/bmp 等
data: URI定义于IETF标准的RFC 2397
data: URI的基本使用格式如下:
data:[][;base64|charset=some_charset],
最后做个实例,把这段保存为htm文件,用浏览器打开看看是不是一个图,
src="data:image/bmp;base64,Qk0eAgAAAAAAALYAAAAoAAAAEgAAABIAAAABAAgAAAAAAAAAAA DEDgAAxA4AACAAAAAgAAAAFSph/ySn4f8jRGP/mt70/zg1M/9DqMr/YWJg/yZqtf8EAwP/Xouz/5O qpP81Vn7/O4ut/xQqQP8TUJL/TmaU/y9ylv8nWKH/g3Z1/x3d9v+JvNj/LCYk/yQcGf8Nb7T/HUKV /w0bJ/8XW7L/YNT7/7b1/P+Niof/I43F/////wAfFhYVFhUWFhYVFRUVFhUWFR8AABYCBwcYARgJC wQNDQICDQ0NBAAABAIaEQcHCwsNDQICBA0NDQIEAAAEAgcHHg4CCw4eFAIPAg0NAgQAAAQLBwceDg sQEQMJHh4GDQ0CBAAAFQsaGgcRDwULCw8UCQ0CDQsEAAAEAAcREQ4LCQEXDgAAAQIZEAQAABUCGAc RGAAJAxsbDAsKAhkQBAAAFQwYGAcHAAMDAxQUFAodDQIVAAAWHgEYGB4YAwMDHBwDCgYNDRUAABUQ AQEYBx4RFBQCFA8CBAACFQAABAgeAR4RAREZAAAJFA4ADQsVAAAECBkBAR4FHhEFHBwUCgoCAhUAA BUICB4eHgEHHBwcHAMUCgICFQAAFQgIDQEeEwEPAwMUCQkAAgwWAAACCAgIAQETExoAGhcXHg4TGR UAABUGFggZDAUFBQwMEBAMBQ8EBgAAHwQKEhISEhISEhIdEhISHRIfAAA=" />
可在Chrome、firefox、Opera、ie8里使用
这里杯具来了,经测试居然不能在ie6中使用,可印象中那个应该是ie一族的,可能是ie5
查下资料,ie8也是有限支持32K以内,ie6/ie7不支持,而ie5居然是率先开始支持的(因为效率安全问题在ie6被弃用了)。
有点美中不足啊~
Python中进行Base64编码和解码 收藏
Base64编码是一种“防君子不防小人”的编码方式。广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有“=”,生成的编码都是ascii字符。
优点:速度快,ascii字符,肉眼不可理解
缺点:编码比较长,非常容易被破解,仅适用于加密非关键信息的场合
Python中进行Base64编码和解码
>>> import base64
>>> s = '我是字符串'
>>> a = base64.b64encode(s)
>>> print a
ztLKx9fWt/u0rg==
>>> print base64.b64decode(a)
我是字符串
阅读(10943) | 评论(0) | 转发(0) |