タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【AS400】スキーマ変更した後、Viewはどうなるか?

概要

前回の続きです。

tigertaizo.hatenablog.com

テーマは「スキーマ変更した後、Viewはどうなるか?」です。

DB2 for iでの動作確認

前回同様、実際に「手を動かして試す」ことにしました。

検証用テーブルの準備

今回は「果物テーブル」を作ってみました。

CREATE TABLE TIGERDB.TFRUITS (                                     
ID INT NOT NULL GENERATED ALWAYS AS IDENTITY                       
       (START WITH 1 INCREMENT BY 1 NO CACHE),                     
NAME CHAR(32),                                                     
PRICE INT,                                                         
MEMO CHAR(40),                                                     
MEMO2 CHAR(40),                                                    
CRT_TS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,               
UPD_TS TIMESTAMP NOT NULL,                                         
PRIMARY KEY(ID) )                                                  
RCDFMT RECFRU                                                      
--TIGERDB にテーブル TFRUITS が作成されましたが,ジャーナル処理されていません。


INSERT INTO TIGERDB.TFRUITS (NAME, PRICE, MEMO, MEMO2, UPD_TS)  
  VALUES (' バナナ ',298, '', '', '0001-01-01-00.00.00')        
--TIGERDB の TFRUITS に 1 行が挿入された。                        

INSERT INTO TIGERDB.TFRUITS (NAME, PRICE, MEMO, MEMO2, UPD_TS)
  VALUES (' いちご ',545, '', '', '0001-01-01-00.00.00')      
--TIGERDB の TFRUITS に 1 行が挿入された。                      

INSERT INTO TIGERDB.TFRUITS (NAME, PRICE, MEMO, MEMO2, UPD_TS)   
  VALUES (' みかん ',380, '', '', '0001-01-01-00.00.00')         
--TIGERDB の TFRUITS に 1 行が挿入された。

ビューの作成

今回準備したのはテーブル1つだけですので、WHERE文を使ったシンプルなビューにしました。

CREATE VIEW TIGERDB.VFRUITS AS              
 SELECT ID, NAME, PRICE, MEMO, MEMO2        
   FROM TIGERDB.TFRUITS                     
  WHERE PRICE > 300                         
-- ビュー VFRUITS が TIGERDB に作成された。   

問題なく、ビューを利用できましたね。

SELECT * FROM TIGERDB.VFRUITS

--ID  NAME     PRICE    MEMO         MEMO2
-- 2  いちご     545
-- 3  みかん     380

検証作業

さあ、ここからが本題です。

(1) フィールド削除

ビューが参照しているテーブルの1つのフィールドを削除してみました。

ALTER TABLE TIGERDB.TFRUITS                               
DROP COLUMN MEMO2             
           
--TIGERDB のテーブル TFRUITS に対する ALTER が完了しました。
【JOBLOG Message】

フィールド MEMO2 を変更するとデータが失われます。 
  (C I) ファイル TFRUITS の変更はデータが失われる原因となることがある。
  ? I                          
ライブラリー TIGERDB の従属ファイル VFRUITS が削除された。
ファイル TFRUITS について 1 個の制約が変更された。

すでにJOBLOGの表示でわかるように、削除したフィールドが含むビューも、連動して削除されてしまいましたね。

当然の動きかもしれませんね。挙動がわかればOKです。

(2) フィールド属性変更

今度は属性変更です。

再度ビューを作成してから、1つのフィールドの長さを変更してみました。

-- Viewを再作成
CREATE VIEW TIGERDB.VFRUITS AS                
 SELECT ID, NAME, PRICE, MEMO                 
   FROM TIGERDB.TFRUITS                       
  WHERE PRICE > 300                           
-- ビュー VFRUITS が TIGERDB に作成された。     


ALTER TABLE TIGERDB.TFRUITS                                  
ALTER COLUMN MEMO SET DATA TYPE CHAR(50)                     
--TIGERDB のテーブル TFRUITS に対する ALTER が完了しました。

今度は、ビューが削除されることは無かったです。

スキーマ変更でViewに影響が無ければ、毎回削除されるわけでは無いようです。


まとめ

テーブルに手を加えた場合のビューへの影響を調査してみました。

当たり前のこと過ぎて、大変恐縮なのですが、スキーマ変更後には、DSPDBRコマンドやWRKOBJコマンドなどでビューの存在を確認した方がいいということでしょう。

RPG言語に慣れすぎてしまって、「SQLファースト」へシフトチェンジするのに四苦八苦しているところですが、今回のように検証を積み重ねながら、幅広くテクノロジーを利用し、本来やるべきタスクに集中していこうと思っています。