我需要以50K为块更新Customer表,Customer表中的记录数为200万。
我使用DB2命令提示符从使用bat文件的文件中执行sql。
我创建了两个文件。
1.customupdate.bat
DB2 CONNECT TO DBTEST USER DB2ADMIN USING XXXXXX
set start=%1
set end=%2
db2 -l D:vinuCUSTOMERADDRESS.log -mstf D:vinuCUSTOMERADDRESS.sql
2.customer.sql
update customer set firstname='XXXX' where customercid between 1 and 50000
在这里,我需要从命令提示符传递1和50000值。
更新客户集firstname='XXXX',其中customerid介于1和50000之间
我使用下面的命令成功地执行了上面的sql,但是我需要将参数传递到sql文件。
C: \Program Files\IBM\SQLLIB\BIN>customerupdate.bat 1 50000
请注意:我不能像那样直接使用查询
db2-l D:\vinu\CUSTOMERADDRESS.log-mst"更新客户集firstname='XXXX',其中customerid在%1和%2之间"查询只能从sql文件中提供。
使用传统的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
CCD_ 1和CCD_。
与其将所有SQL都放在一个单独的SQL文件中,为什么不将语句包含在批处理文件中呢?
DB2 CONNECT TO DBTEST USER DB2ADMIN USING XXXXXX
set start=%1
set end=%2
set FIRSTNAME=Vinu
db2 -l D:vinuCUSTOMERADDRESS.LOG "update customer set firstname = 'XXXXX' where customercid between %start% and %end"
这将需要更多的错误检查(因为CLP不能依赖-s
标志来停止执行),但它会起作用。