2011-07-21 27 views
0

DB2で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 

答えて

0

これまでは、SQLスクリプトを使用してデータベースに対して複数のパスを実行しています。

あなたfindMax機能を使用している場合はこのようにSQLを持っている場合は、同じ操作を行うことができます。

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

単にテキストファイルにそのSQLの出力をリダイレクトして、SQLなどのテキストファイルを実行します。

これもALTER TABLEで直接行うことができますが、3回は必要です。