2016-06-21 24 views
0

プライマリ・キー制約を削除するには、テーブルを変更する必要がありますが、唯一の問題は別のシステムによってテーブルが生成され、だから回避策として、私は動作するはずだと思う以下のスクリプトを作成しましたが、そうではありませんので、誰でも私が動作する別のスクリプトを書くのを助けてください。選択条件に基づいてoracleのテーブル・スクリプトを変更します

ALTER TABLE temp 
MODIFY CONSTRAINT (select constraint_name 
        FROM all_constraints 
        WHERE owner like '%tempUser%' and 
         table_name like '%temp%' and 
         constraint_type = 'P' 
       ) 
DISABLE; 

実行しようとすると次のエラーが発生します。

SQLエラー:ORA-14006:無効なパーティション名 14006. 00000 - 「無効なパーティション名」 *原因:フォームのパーティション名が期待 ではなく、存在しています。 *処置:適切なパーティション名を入力してください。

推奨リンクに基づいて次のコードを試しましたが、エラーなしで実行されますが、制約は削除されません。

BEGIN 
    FOR c IN 
    (SELECT c.owner, c.table_name, c.constraint_name 
    FROM all_constraints c 
    where owner like '%tempUser%' and table_name like '%temp%' and constraint_type = 'P') 
    LOOP 
    dbms_utility.exec_ddl_statement('alter table ' || c.table_name || ' modify CONSTRAINT ' || c.constraint_name || ' disable '); 
    END LOOP; 
END; 
/
+0

このスクリプトは動作しません。それはエラーを出すのですか?これは答えを見つけるのに役立ちます。 – Steven

+1

[Oracleのすべてのテーブル制約を無効にする]の可能な複製(http://stackoverflow.com/questions/128623/disable-all-table-constraints-in-oracle) – mustaccio

答えて

1

これを解決するには、動的SQLを使用できます。まず、制約の名前を見つけて、それを無効にする動的コードを作成します。

Disable all table constraints in Oracleをご覧ください。

関連する問題