私は何かに取り組んでおり、いくつかのビューを確認する必要があります。私はこのコードを使用します:
SELECT SUBSTR(T.TABNAME,1,32) AS TABLE, SUBSTR(T.TABSCHEMA,1,32) AS SCHEMA, T.STATUS, T.TYPE FROM SYSCAT.TABLES T WHERE T.TABNAME LIKE 'TEMP_T%'
それが機能するかどうかを確認するには:
私が理解していることから(少し調査しました)、これはビューを無効にするはずですが、そうではありませんでした。 (ビューを作成した後)テーブルの最初の列も削除しましたが、ビューはまだ有効であるように見えます。結局、テーブルを削除しましたが、ビューはまだSTATUS = 'N'にあります。
なぜこれが起こっているのか理解するのを手伝ってくれませんか?これはDB2のバグだと思いますが、DBを初めて使用するので、他の意見を聞きたいと思います。
ログは次のとおりです。
CREATE TABLE DB2INST1.TEMP_T ( COL_A CHAR(5) )
DB20000I The SQL command completed successfully.
CREATE VIEW DB2INST1.TEMP_V AS SELECT * FROM DB2INST1.TEMP_T
DB20000I The SQL command completed successfully.
SELECT SUBSTR(T.TABNAME,1,32) AS TABLE, SUBSTR(T.TABSCHEMA,1,32) AS SCHEMA, T.STATUS, T.TYPE FROM SYSCAT.TABLES T WHERE T.TABNAME LIKE 'TEMP_%'
TABLE SCHEMA STATUS TYPE
-------------------------------- -------------------------------- ------ ----
TEMP_T DB2INST1 N T
TEMP_V DB2INST1 N V
2 record(s) selected.
ALTER TABLE DB2INST1.TEMP_T ADD COLUMN COL_B VARCHAR(20)
DB20000I The SQL command completed successfully.
ALTER TABLE DB2INST1.TEMP_T DROP COLUMN COL_A
DB20000I The SQL command completed successfully.
REORG TABLE DB2INST1.TEMP_T
DB20000I The REORG command completed successfully.
SELECT SUBSTR(T.TABNAME,1,32) AS TABLE, SUBSTR(T.TABSCHEMA,1,32) AS SCHEMA, T.STATUS, T.TYPE FROM SYSCAT.TABLES T WHERE T.TABNAME LIKE 'TEMP_%'
TABLE SCHEMA STATUS TYPE
-------------------------------- -------------------------------- ------ ----
TEMP_T DB2INST1 N T
TEMP_V DB2INST1 N V
2 record(s) selected.
DROP TABLE DB2INST1.TEMP_T
DB20000I The SQL command completed successfully.
SELECT SUBSTR(T.TABNAME,1,32) AS TABLE, SUBSTR(T.TABSCHEMA,1,32) AS SCHEMA, T.STATUS, T.TYPE FROM SYSCAT.TABLES T WHERE T.TABNAME LIKE 'TEMP_%'
TABLE SCHEMA STATUS TYPE
-------------------------------- -------------------------------- ------ ----
TEMP_V DB2INST1 N V
1 record(s) selected.
列を削除した後に有効なビューについて:ビューはSELECT *
として定義されているため、ビューは引き続き有効です。
テーブルを削除した後のビューの有効性については、SYSCAT.VIEWS
のフィールドVALID
を使用してください。以下を参照してください。
db2 => DROP TABLE DB2INST1.TEMP_T
DB20000I The SQL command completed successfully.
db2 => SELECT SUBSTR(VIEWNAME,1,32) AS TABLE, VALID FROM SYSCAT.VIEWS WHERE VIEWNAME='TEMP_V'
TABLE VALID
-------------------------------- -----
TEMP_V N
1 record(s) selected.
db2 => CREATE TABLE DB2INST1.TEMP_T ( COL_A CHAR(5) )
DB20000I The SQL command completed successfully.
db2 => SELECT SUBSTR(VIEWNAME,1,32) AS TABLE, VALID FROM SYSCAT.VIEWS WHERE VIEWNAME='TEMP_V'
TABLE VALID
-------------------------------- -----
TEMP_V N
1 record(s) selected.
db2 => SELECT * FROM DB2INST1.TEMP_V
COL_A
-----
0 record(s) selected.
db2 => SELECT SUBSTR(VIEWNAME,1,32) AS TABLE, VALID FROM SYSCAT.VIEWS WHERE VIEWNAME='TEMP_V'
TABLE VALID
-------------------------------- -----
TEMP_V Y
1 record(s) selected.