1

我需要以 50K 的块更新客户表,客户表中的记录数为 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.客户.sql

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

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

更新客户集 firstname='XXXX' 其中 customercid 介于150000之间

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

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

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

db2 -l D:\vinu\CUSTOMERADDRESS.log -mst " update customer set firstname='XXXX' where customercid between %1 and %2" 查询只能从 sql 文件中提供。

4

2 回答 2

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分别替换为第一个和第二个命令行参数。

于 2014-11-07T18:51:28.650 回答
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"

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

于 2014-11-08T04:55:37.057 回答