sql >> データベース >  >> RDS >> Oracle

制約違反の例外ORA-00001

    一意の制約 まあ、独自性を強制します。 主キー制約<とは異なり、nullを許可します。 / a> 。

    エラーは、データベースが明示的に禁止するように構成されている場合に、重複データを挿入していることを意味します。

    all_constraints 。リンクは列CONSTRAINT_TYPEをデコードします 、たとえば P 主キーであり、 U 一意のキー。

    select *
      from all_constraints uc
     where uc.table_name = 'MY_TABLE'
       and owner = 'DBSCHEMA'
    

    制約内の列を確認するには、<を使用します。 code> all_cons_columns 代わりに、または2つを1つのクエリに結合します:

    select uc.*, ucc.column_name, ucc.position
      from all_constraints uc
      join all_cons_columns ucc
        on uc.owner = ucc.owner
       and uc.table_name = ucc.table_name
       and uc.constraint_name = ucc.constraint_name
     where uc.table_name = 'MY_TABLE'
       and uc.owner = 'DBSCHEMA'
    

    どちらのクエリにも、条件とconstraint_name ='IDX_CO_DETAILS'を追加できます。 問題を引き起こしていると思われる特定の制約の詳細を見つけるため。

    あなたのコメントはいくつかの理由で少し驚くべきものです。たとえば、名前を指定せずにテーブルを作成したときにインラインで定義された制約など、システムで作成された制約も表示されます。また、制約名 IDX ... インデックスであることを意味します。

    次のクエリを実行すると、オブジェクトがデータベースに存在するかどうかがわかります。

    select *
      from all_objects
     where object_name = 'IDX_CO_DETAILS'
    

    OBJECT_TYPE このクエリによって返されるのは'INDEX'です。 。

    その後、次のクエリは、その名前、インデックスのタイプ、関連付けられているテーブル、およびそのテーブルの所有者を持つすべてのインデックスを返します。

    select *
      from all_indexes
     where index_name = 'IDX_CO_DETAILS'
    

    あなたのエラーから判断すると、列 UNIQUNESS このクエリによって返されるのは'UNIQUE'です。 。

    これは、オブジェクトを追跡するのに役立ちます。

    システムパッケージdbms_metadataを使用することもできます。 オブジェクトのDDLを追跡します。塊を返すことに注意してください。

    select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA') 
      from dual
    

    パラメータschema オプションです。




    1. PostgreSQL-UPDATEが失敗したときに行の内容を返します

    2. Oracleにsp_getapplock、sp_releaseapplockに相当するものはありますか?

    3. PHPおよびjQueryとのライブチャット。情報をどこに保存しますか? Mysqlまたはファイル?

    4. postgresの日付表現をISO8601文字列に変換します