互联网服务scriptclpvariable

DB2 CLP执行带变量的脚本

DB2 版本:db2 v9.5OS  版本:Windows Server 2003

脚本形式:
myscr.clp
-------------------------
select * from sbi where ssid=@ssid ;

普通脚本的执行使用db2 -tf myscr.clp即可,但此脚本中存在变量@ssid,需要赋值,这种情况应该怎么调用呢?
上网查了一下有人建议使用存储过程来执行,这种方案由于权限等问题不适合使用,各位大神有没有什么好的建议,谢谢!
参与8

7同行回答

hulun1987hulun1987软件开发工程师招商银行广州分行
学习了,以前重来没接触过。显示全部
学习了,以前重来没接触过。收起
银行 · 2014-06-17
浏览1309
ppjava2009ppjava2009系统工程师用友汽车信息科技(上海)有限公司
可以用bat写个字符串批量替换的脚本,然后每次运行这个脚本就会提示让输入一个变量的值,然后就会自动替换a ...zsj2002 发表于 2014-6-16 16:27 谢谢,这样也可以,不过张总提出一个更专业的处理方案,就是使用自定义变量,之前没有接触过,还蛮好用的,呵呵!。...显示全部
可以用bat写个字符串批量替换的脚本,然后每次运行这个脚本就会提示让输入一个变量的值,然后就会自动替换a ...
zsj2002 发表于 2014-6-16 16:27

谢谢,这样也可以,不过张总提出一个更专业的处理方案,就是使用自定义变量,之前没有接触过,还蛮好用的,呵呵!。收起
互联网服务 · 2014-06-16
浏览1265
ppjava2009ppjava2009系统工程师用友汽车信息科技(上海)有限公司
张总提出一个比较优的方案在我的理解基础上我再小结一下,脚本中有许多地方需要用到变量v_ssidb.sql 脚本内容如下:-----------------------select ssid,dept from sbi where ssid=v_ssid ;b.bat 批处理内容如下: -----------------------@echo offdb2 "connect to sample"re...显示全部
张总提出一个比较优的方案
在我的理解基础上我再小结一下,脚本中有许多地方需要用到变量v_ssid

b.sql 脚本内容如下:
-----------------------
select ssid,dept from sbi where ssid=v_ssid ;

b.bat 批处理内容如下:
-----------------------
@echo off

db2 "connect to sample"

rem 定义并赋值变量
db2 "drop variable v_ssid"
db2 "create variable v_ssid decimal(16,0)"
db2 "set v_ssid=18705"

rem 执行脚本
db2 -tvf b.sql -z b.log

rem 删除自定义的变量
db2 "drop variable v_ssid"
db2 "terminate"

goto :eof


执行时这样调用:
db2cmdadmin -c -w -i b.bat收起
互联网服务 · 2014-06-16
浏览1305
zsj2002zsj2002数据库管理员澳門大豐銀行
可以用bat写个字符串批量替换的脚本,然后每次运行这个脚本就会提示让输入一个变量的值,然后就会自动替换a.sql里面关于参数变量的值并且把改变后的文本存为b.sql,最后执行db2 -tvf b.sql -z a.log,应该能达到你的目的...显示全部
可以用bat写个字符串批量替换的脚本,然后每次运行这个脚本就会提示让输入一个变量的值,然后就会自动替换a.sql里面关于参数变量的值并且把改变后的文本存为b.sql,最后执行db2 -tvf b.sql -z a.log,应该能达到你的目的收起
银行 · 2014-06-16
浏览1287
ppjava2009ppjava2009系统工程师用友汽车信息科技(上海)有限公司
可不可以改变下思路写个bat例如test.bat@echo offdb2 "select * from sbi where ssid=%1"然后这么调用 ...zsj2002 发表于 2014-6-16 11:46 非常感谢您提供的思路!其实脚本中变量个数肯定不多,关键是脚本文件是变化的,变量部分却不变,一般都固定的,你这种思路其实也可以,写成...显示全部
可不可以改变下思路写个bat
例如test.bat
@echo off
db2 "select * from sbi where ssid=%1"

然后这么调用 ...
zsj2002 发表于 2014-6-16 11:46


非常感谢您提供的思路!

其实脚本中变量个数肯定不多,关键是脚本文件是变化的,变量部分却不变,一般都固定的,
你这种思路其实也可以,写成下面形式:


test.bat
----------------
set v_ssid=18705
db2 "select * from sbi where ssid=%v_ssid%"


调用时采用db2cmdadmin -c -w -i test.bat。
但缺陷是这样脚本达到几千几万,甚至更多行时,如果运行出错,排错非常困难。

如果能带参调用脚本,则在批处理中这样调用(不知道怎么传参,像Toad、Quest之类的三方客户端工具可以,不知道是否是软件自身的形为,在运行SQL时如果有变量自动弹出变量赋值框):
db2 -tvf a.sql -z a.log
出错信息可以通过-v选项直接在a.log中方便查找。收起
互联网服务 · 2014-06-16
浏览1359
zsj2002zsj2002数据库管理员澳門大豐銀行
可不可以改变下思路写个bat例如test.bat@echo offdb2 "select * from sbi where ssid=%1"然后这么调用test.bat var1不过如果sql语句太长或者很多句就不合适了显示全部
可不可以改变下思路写个bat
例如test.bat
@echo off
db2 "select * from sbi where ssid=%1"

然后这么调用test.bat var1
不过如果sql语句太长或者很多句就不合适了收起
银行 · 2014-06-16
浏览1257
张东焕张东焕技术总监IBM官方授权讲师
C:\Program Files\IBM\SQLLIB\BIN>db2 -tvf mysql.txtconnect to sample   数据库连接信息 数据库服务器         = DB2/NT64 10.5.1 SQL 授权标识         = ZHANGDH 本地数据库别名  &nbs...显示全部
C:\Program Files\IBM\SQLLIB\BIN>db2 -tvf mysql.txt
connect to sample

   数据库连接信息

数据库服务器         = DB2/NT64 10.5.1
SQL 授权标识         = ZHANGDH
本地数据库别名       = SAMPLE


drop variable zhangdh.myname
DB20000I  SQL 命令成功完成。

create variable zhangdh.myname char(10) default 'zhangdh'
DB20000I  SQL 命令成功完成。

set  zhangdh.myname='test1'
DB20000I  SQL 命令成功完成。

select * from tab1 where deptname = zhangdh.myname

POSTID      DEPTNAME
----------- ----------
          1 test1
          1 test1

  2 条记录已选择。


connect reset
DB20000I  SQL 命令成功完成。


C:\Program Files\IBM\SQLLIB\BIN>cat mysql.txt
connect to sample;
drop variable zhangdh.myname;
create variable zhangdh.myname char(10) default 'zhangdh';
set  zhangdh.myname='test1';
select * from tab1 where deptname = zhangdh.myname;
connect reset;

C:\Program Files\IBM\SQLLIB\BIN>收起
IT咨询服务 · 2014-06-16
浏览1324

提问者

ppjava2009
系统工程师用友汽车信息科技(上海)有限公司
擅长领域: 中间件数据库java

相关文章

问题状态

  • 发布时间:2014-06-16
  • 关注会员:1 人
  • 问题浏览:7378
  • 最近回答:2014-06-17
  • X社区推广