ORACLE TECHNOLOGY NETWORK
 
 
   

Oracle Technology Network (OTN) Japan - 掲示板 » コミュニティ » 初心者の部屋

スレッド: 制約を無効にする。

このスレッドに返信する このスレッドに返信する スレッド一覧へ スレッド一覧へ

Permlink 返信数: 7 - ページ数: 1 - 最新投稿 : 2002/12/11 23:43 最新投稿者: Papageno - スレッド表示形式:
yunfat021129

投稿数: 35
登録日時: 02/12/04


制約を無効にする。
投稿時刻: 2002/12/11 12:38
  このスレッドに返信します… 返信

【Oracle】8.1.6 Work group server
【OS】  Windows200 Professional
■制約(外部キー)を無効/有効にしたいです。
STATUSをenabled/disabledに変更する方法を教えて下さい!
どなたか識者の方。お願い致します。
以下の方法ですと、制約そのものを、’削除’/’作成’
という意味合いになります。これは、意図するところではありません。

<制約の無効(DROP)>
alter table 表A
drop constraint 制約名A;
<制約の有効(ADD)>
alter table 表A
add (constraint 制約名A foreign key (列A)
references 表B(列A)) ;
−−−以上。

SnowMan

投稿数: 3,517
登録日時: 98/01/06


RE:制約を無効にする。
投稿時刻: 2002/12/11 12:44   yunfat021129 さんへの返信です。 yunfat021129 さんへの返信です。
  このスレッドに返信します… 返信

こんにちは。

>■制約(外部キー)を無効/有効にしたいです。
>STATUSをenabled/disabledに変更する方法を教えて下さい!

SQLリファレンスに記載されている内容です。
Alter Tableの項の記述されています。

よ〜く読んでみましょう。
# 読みにくいとは思いますが

yasunorikaku

投稿数: 3,444
登録日時: 98/11/27


RE:制約を無効にする。
投稿時刻: 2002/12/11 13:20   yunfat021129 さんへの返信です。 yunfat021129 さんへの返信です。
  このスレッドに返信します… 返信


>【Oracle】8.1.6 Work group server
>【OS】  Windows200 Professional
>■制約(外部キー)を無効/有効にしたいです。
>STATUSをenabled/disabledに変更する方法を教えて下さい!
>どなたか識者の方。お願い致します。
>以下の方法ですと、制約そのものを、’削除’/’作成’
>という意味合いになります。これは、意図するところではありません。
>
><制約の無効(DROP)>
>alter table 表A
>drop constraint 制約名A;
><制約の有効(ADD)>
>alter table 表A
>add (constraint 制約名A foreign key (列A)
>references 表B(列A)) ;
>−−−以上。

SQLリファレンスに記載があります。

無効:
ALTER TABLE table_name
DISABLE
CONSTRAINT constraint_name;

有効:
ALTER TABLE table_name
ENABLE
CONSTRAINT constraint_name;

# メンテ上、参照整合性制約を全部まとめて
# DISABLE/ENABLEにしたいことがあるんだけれど
# さすがにそういう命令はないですよね?(;^^)

yunfat021129

投稿数: 35
登録日時: 02/12/04


RE[1]:制約を無効にする。
投稿時刻: 2002/12/11 13:44   yasunorikaku さんへの返信です。 yasunorikaku さんへの返信です。
  このスレッドに返信します… 返信

ありがとうございました。
助かりました。


>
>>【Oracle】8.1.6 Work group server
>>【OS】  Windows200 Professional
>>■制約(外部キー)を無効/有効にしたいです。
>>STATUSをenabled/disabledに変更する方法を教えて下さい!
>>どなたか識者の方。お願い致します。
>>以下の方法ですと、制約そのものを、’削除’/’作成’
>>という意味合いになります。これは、意図するところではありません。
>>
>><制約の無効(DROP)>
>>alter table 表A
>>drop constraint 制約名A;
>><制約の有効(ADD)>
>>alter table 表A
>>add (constraint 制約名A foreign key (列A)
>>references 表B(列A)) ;
>>−−−以上。
>
>SQLリファレンスに記載があります。
>
>無効:
>ALTER TABLE table_name
> DISABLE
> CONSTRAINT constraint_name;
>
>有効:
>ALTER TABLE table_name
> ENABLE
> CONSTRAINT constraint_name;
>
># メンテ上、参照整合性制約を全部まとめて
># DISABLE/ENABLEにしたいことがあるんだけれど
># さすがにそういう命令はないですよね?(;^^)


Papageno

投稿数: 2,645
登録日時: 00/09/14


RE[1]:制約を無効にする。
投稿時刻: 2002/12/11 14:18   yasunorikaku さんへの返信です。 yasunorikaku さんへの返信です。
  このスレッドに返信します… 返信

># メンテ上、参照整合性制約を全部まとめて
># DISABLE/ENABLEにしたいことがあるんだけれど
># さすがにそういう命令はないですよね?(;^^)

ワタシ、ナマケモノなんで、TABLE_NAME毎ヴァージョンですが、以前作りました。(^^;

-- DISABLE CONSTRAINT
SELECT 'ALTER TABLE ' || TABLE_NAME || ' DISABLE CONSTRAINT ' || CONSTRAINT_NAME || ' ;' AS CONSTRAINT
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_NAME NOT LIKE 'SYS_%' AND TABLE_NAME = '&TABLE_NAME' ;
-- ^^^^
-- CONSTRAINT_NAME 'SYS_' って NOT NULL 制約などだから、DISABLE/ENABLE
-- の対象から外しても良いでしょう。

--ENABLE CONSTRAINT
SELECT 'ALTER TABLE ' || TABLE_NAME || ' ENABLE CONSTRAINT ' || CONSTRAINT_NAME || ' ;' AS CONSTRAINT
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_NAME NOT LIKE 'SYS_%' AND TABLE_NAME = '&TABLE_NAME' ;

この例では、TABLE_NAMEを置換変数で与えていますが、ストアド・プログラムに
パラメータで与えるとか、また、もっと自動化したければ、この問合せ結果を
EXECUTE IMMEDIATE (古いヴァージョンでは DBMS_SQL)で実行すれば良いです。

ushitaki

投稿数: 7,079
登録日時: 98/10/30


RE[2]:制約を無効にする。
投稿時刻: 2002/12/11 16:36   Papageno さんへの返信です。 Papageno さんへの返信です。
  このスレッドに返信します… 返信

>># メンテ上、参照整合性制約を全部まとめて
>># DISABLE/ENABLEにしたいことがあるんだけれど
>># さすがにそういう命令はないですよね?(;^^)
>
>ワタシ、ナマケモノなんで、TABLE_NAME毎ヴァージョンですが、以前作りました。(^^;

仮本番機からデータを持て来て、importして
いろいろと検証するために毎週のように行っています。
ユーザ単位指定のものをどこかにアップしたような...
TRUNCATE付きですが。

ちなみに以下の構文で行っています。
ALTER TABLE テーブル名 MODIFY CONSTRAINT [ENABLE|DISABLE]

まぁ Papageno さんが書かれているのと似たり寄ったりなので
ソースを再アップするのは控えますが。

では

jiropochi

投稿数: 5,213
登録日時: 00/04/03


RE[2]:制約を無効にする。
投稿時刻: 2002/12/11 23:10   Papageno さんへの返信です。 Papageno さんへの返信です。
  このスレッドに返信します… 返信

>># メンテ上、参照整合性制約を全部まとめて
>># DISABLE/ENABLEにしたいことがあるんだけれど
>># さすがにそういう命令はないですよね?(;^^)

参照整合性制約全なら

FROM USER_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'R'

とした方がよろしいかと思います。



Papageno

投稿数: 2,645
登録日時: 00/09/14


RE[3]:制約を無効にする。
投稿時刻: 2002/12/11 23:43   jiropochi さんへの返信です。 jiropochi さんへの返信です。
  このスレッドに返信します… 返信

おお、見落としていた。(^^;;








ウェブサイトのご使用条件 | 個人情報保護基本方針/情報保護基本方針