如何使用CLP将值从bat文件传递到DB2 sql文件

时间:2014-11-07 17:13:45

标签: sql windows batch-file db2 clp

我需要以50K的块更新Customer表,customer表中的记录数为200万。

我正在使用DB2命令提示符使用bat文件从文件中执行我的sql。

我创建了两个文件。

1。 customerupdate.bat

DB2 CONNECT TO DBTEST USER DB2ADMIN USING XXXXXX
set start=%1
set end=%2
db2 -l D:\vinu\CUSTOMERADDRESS.log  -mstf D:\vinu\CUSTOMERADDRESS.sql 

2。 customer.sql

update customer set firstname='XXXX' where customercid between 1 and 50000

在这里,我需要从命令提示符传递 1和50000值。

更新客户设置名字=' XXXX'其中customercid介于 1 50000

之间

我正在使用下面的命令成功执行sql以上,但是我需要将参数传递给sql文件。

C:\ Program Files \ IBM \ SQLLIB \ BIN> customerupdate.bat 1 50000

请注意:我不能直接使用查询

db2 -l D:\ vinu \ CUSTOMERADDRESS.log -mst"更新客户设置firstname =' XXXX'其中customercid介于%1和%2之间" 该查询应仅从sql文件提供。

2 个答案:

答案 0 :(得分:2)

你不能用传统的CLP做到这一点,但如果你使用CLPPlus,它是可能的。

customer.sql

update customer set firstname='XXXX' where customercid between &1 and &2;
exit

调用CLPPlus(它使用JDBC连接):

clpplus -nw db2admin/password@hostname:port/dbtest @customer.sql 1 50000

&1&2将分别替换为第一个和第二个命令行参数。

答案 1 :(得分:1)

为什么不将这些语句包含在批处理文件中,而不是将所有SQL放在单独的SQL文件中?

DB2 CONNECT TO DBTEST USER DB2ADMIN USING XXXXXX
set start=%1
set end=%2

set FIRSTNAME=Vinu

db2 -l D:\vinu\CUSTOMERADDRESS.LOG "update customer set firstname = 'XXXXX' where customercid between %start% and %end"

这将需要更多的错误检查(因为您不能依赖CLP的-s标志来停止执行),但它会起作用。