2017-07-01 6 views
0

を与えずにPLSQLで制約を無効にテーブルを作成した後に私のコードここに任意の名前

Create table Issue(
Lib_Issue_Id Number(10) Primary Key, 
Book_No number(6), 
Member_Id number(5), 
Issue_Date Date, 
Return_Date Date, 
check (Issue_date<Return_Date), 
FOREIGN KEY (Book_No) REFERENCES Books(Book_No), 
FOREIGN KEY (Member_Id) REFERENCES Member(Member_Id) 
); 

です。私はすべての制約を無効にしたいのですが、どの名前にも与えられていません。どうすれば制約を無効にできますか????

+1

(「任意の名前には与えられていません」 - *制約名が指定されていない可能性がありますそうするために*?) – greybeard

+0

あなたは、示されているように作成された制約を主張していますか、または*作成後に*作成された制約を操作することを受け入れるでしょうか? – greybeard

+1

私はそれがあなたが個人的に制約の名前をつけたかどうかにかかわらず何の違いもないとは思わない。それらはすべてデータ・ディクショナリに名前があり、 'user/all/dba_constraints'のループを実行するだけです。 –

答えて

1

明白な答えは、「制約に名前をつけ、後の世代のプログラマがあなたの名前に永遠にあなたの名前の賛美歌を歌います」です。しかし、あなたの同僚からの永遠の感謝が何かではない場合、あなたはthe docs for the ALL_CONSTRAINTS view can be found hereです。カーソルを使用してビューから制約名を読み取り、無効にします。

FOR aRow IN (SELECT * 
       FROM ALL_CONSTRAINTS 
       WHERE TABLE_NAME = 'ISSUE' AND 
        CONSTRAINT_TYPE = 'R') 
LOOP 
    EXECUTE IMMEDIATE 'ALTER TABLE ' || 
        aRow.TABLE_NAME || 
        ' MODIFY CONSTRAINT ' || 
        aRow.CONSTRAINT_NAME || 
        ' DISABLE'; 

    DBMS_OUTPUT.PUT_LINE('FK constraint ' || aRow.CONSTRAINT_NAME || ' disabled'); 
END LOOP; 
関連する問題