我需要以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文件提供。
答案 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
标志来停止执行),但它会起作用。