时间:2011-07-21 11:49:40

标签: function db2 subquery alter-table

我想在DB2中的ALTER TABLE命令中运行子查询。

ALTER TABLE user ALTER column userId SET GENERATED ALWAYS AS IDENTITY 
                                                     (start with 2646)

以上查询工作正常。但是我想从查询本身开始给出价值,如下所示。

ALTER TABLE user ALTER column userId SET GENERATED ALWAYS AS IDENTITY 
                           (start with (SELECT MAX(userId) FROM user))

我尝试使用函数和存储过程实现此目的。但问题是表名应该在两者中指定。我想改变近40个表的表查询。

CREATE FUNCTION findMax (tablename VARCHAR(64), columnname VARCHAR(255))
                          RETURNS INTEGER 
                          RETURN SELECT MAX(columnname)
                                         FROM tablename

1 个答案:

答案 0 :(得分:0)

我之前通过使用sql脚本并对数据库进行多次传递来完成此操作。

如果你使用findMax函数,如果你有这样的SQL,你可以这样做:

select 'findMax( ' || tabname || ' , ' || colname || ')' 
from syscat.columns where identity = 'Y'

只需将该sql的输出重定向到文本文件,然后将该文本文件作为sql运行。

您也可以直接使用ALTER TABLE执行此操作,但我认为您需要三次传递。