10.2.6 ビュー表の無効化を解除する方法
ビュー表の無効化を解除する方法は,ビュー表が無効化された原因によって異なります。それぞれの方法について説明します。
- 〈この項の構成〉
(1) ALTER TABLE文で表の種別を変更したことによってビュー表が無効化された場合
次に示す場合は,種別を変更した表に依存するすべてのビュー表が無効化されます。
-
ALTER TABLE文を実行して,レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更した場合
-
ALTER TABLE文を実行して,アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更した場合
ビュー表の無効化を解除する手順を次に示します。
- 例題
-
CUSTOMER表をレギュラーマルチチャンク表からアーカイブマルチチャンク表に変更したため,CUSTOMER表に依存するすべてのビュー表が無効化されました。CUSTOMER表に依存するすべてのビュー表の無効化を解除します。
手順
-
無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する
ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索例については,「付録B.21(30) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。
この例では,ビュー表CUSTOMER30s,CUSTOMER40s,およびCUSTOMER50sが無効化されたとします。
-
無効化されたビュー表をDROP VIEW文で削除する
DROP VIEW "CUSTOMER30s" DROP VIEW "CUSTOMER40s" DROP VIEW "CUSTOMER50s"
手順1.で確認した無効化されたビュー表をすべて削除してください。
-
無効化されたビュー表をCREATE VIEW文で再定義する
CREATE VIEW "CUSTOMER30s" ("AGE","SEX","GNO","PNAME","PRICE") AS SELECT "CUSTOMER"."AGE", "CUSTOMER"."SEX", "CUSTOMER"."GNO", "STOCK"."PNAME", "STOCK"."PRICE" FROM "CUSTOMER","STOCK" WHERE "CUSTOMER"."AGE"=30 AND "CUSTOMER"."GNO"="STOCK"."GNO"同様に,CUSTOMER40sおよびCUSTOMER50sもCREATE VIEW文でビュー表を再定義してください。
- ポイント
-
再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。
(2) ALTER TABLE文で表の列名を変更したことによってビュー表が無効化された場合
ALTER TABLE文で表の列名を変更した場合,列名を変更した表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。
- 例題
-
CUSTOMER表の列名を変更したため,CUSTOMER表に依存するすべてのビュー表が無効化されました。CUSTOMER表に依存するすべてのビュー表の無効化を解除します。
手順
-
無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する
ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索例については,「付録B.21(30) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。
この例では,ビュー表CUSTOMER30s,CUSTOMER40s,およびCUSTOMER50sが無効化されたとします。
-
無効化されたビュー表をDROP VIEW文で削除する
DROP VIEW "CUSTOMER30s" DROP VIEW "CUSTOMER40s" DROP VIEW "CUSTOMER50s"
手順1.で確認した無効化されたビュー表をすべて削除してください。
-
CREATE VIEW文の指定内容を修正する
手順1.で調べたCREATE VIEW文の指定内容のうち,列名変更に該当する個所を修正します。
(例)表T1の列名をC3からC33に変更した場合
<修正前>
CREATE VIEW "VT1" ("VC1","VC2","VC3") AS SELECT "C1"."C2","C3" FROM "T1"<修正後>
CREATE VIEW "VT1" ("VC1","VC2","VC3") AS SELECT "C1"."C2","C33" FROM "T1"変更対象の列名をCREATE VIEW文中に指定していない場合は,修正不要です。
-
無効化されたビュー表をCREATE VIEW文で再定義する
CREATE VIEW "CUSTOMER30s" ("AGE","SEX","GNO","PNAME","PRICE") AS SELECT "CUSTOMER"."AGE", "CUSTOMER"."SEX", "CUSTOMER"."GNO", "STOCK"."PNAME", "STOCK"."PRICE" FROM "CUSTOMER","STOCK" WHERE "CUSTOMER"."AGE"=30 AND "CUSTOMER"."GNO"="STOCK"."GNO"同様に,CUSTOMER40sおよびCUSTOMER50sもCREATE VIEW文でビュー表を再定義してください。
- ポイント
-
再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。
(3) 基表に対するSELECT権限を誤って取り消したことによってビュー表が無効化された場合
基表に対するSELECT権限を誤って取り消してしまった場合,その表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。
- 例題
-
CUSTOMER表に対するSELECT権限を誤って取り消してしまったため,CUSTOMER表に依存するすべてのビュー表が無効化されました。CUSTOMER表に依存するすべてのビュー表の無効化を解除します。
手順
-
無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する
ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索例については,「付録B.21(30) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。
この例では,ビュー表CUSTOMER30sが無効化されたとします。
-
無効化されたビュー表をDROP VIEW文で削除する
DROP VIEW "CUSTOMER30s"
手順1.で確認した無効化されたビュー表をすべて削除してください。
-
CUSTOMER表に対するSELECT権限をGRANT文で付与する
GRANT SELECT ON "CUSTOMER" TO "ADBUSER01"
下線部分は,CUSTOMER30sを所有しているHADBユーザの認可識別子を指定します。
-
CUSTOMER30sをCREATE VIEW文で再定義する
CREATE VIEW "CUSTOMER30s" ("AGE","SEX","GNO","PNAME","PRICE") AS SELECT "CUSTOMER"."AGE", "CUSTOMER"."SEX", "CUSTOMER"."GNO", "STOCK"."PNAME", "STOCK"."PRICE" FROM "CUSTOMER","STOCK" WHERE "CUSTOMER"."AGE"=30 AND "CUSTOMER"."GNO"="STOCK"."GNO"- ポイント
-
再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。
(4) 表を誤って削除してしまったことによってビュー表が無効化された場合
表を誤って削除してしまった場合※,削除してしまった表に依存するすべてのビュー表が無効化されます。ビュー表の無効化を解除する手順を次に示します。
- 注※
-
削除動作の指定を省略したDROP TABLE文またはDROP VIEW文を実行した場合が該当します。
手順
-
無効化されたビュー表の一覧と,それらのビュー表の定義情報を確認する
ディクショナリ表を検索すると,無効化されたビュー表の一覧と,それらのビュー表の定義情報を取得できます。ディクショナリ表の検索例については,「付録B.21(30) 依存するビュー表の一覧,およびそれらのビュー表の定義情報を調べる場合」を参照してください。
-
無効化を解除するビュー表をDROP VIEW文で削除する
手順1.で確認した無効化されたビュー表をすべて削除してください。
-
削除してしまった実表をCREATE TABLE文で再定義する。
削除してしまった表がビュー表の場合は,ビュー表をCREATE VIEW文で再定義します。
-
無効化されたビュー表をCREATE VIEW文で再定義する
CREATE VIEW文の指定内容については,手順1.のディクショナリ表の検索結果を参照してください。
- ポイント
-
再定義するビュー表が複数ある場合,ビューレベルの値が小さい順にCREATE VIEW文を実行してください。