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

テーブルの列の種類を変更する

    関数ベースの一意のインデックスが必要です:

    create table tt (
      DealID number(10) primary key,
      LegID number(10),
      OrigID number(10),
      Description varchar2(200 char)
    );
    create unique index tt_leg_orig_dscr_uk on tt (
      case when description = 'A' then description end,
      case when description = 'A' then legid end,
      case when description = 'A' then origid end
    );
    
    insert into tt values (1, 1, 1, 'A');
    1 row(s) inserted.
    
    insert into tt values (2, 1, 1, 'A');
    ORA-00001: unique constraint (XXXXX.TT_LEG_ORIG_DSCR_UK) violated
    
    insert into tt values (2, 1, 2, 'A');
    1 row(s) inserted.
    
    select * from tt;
    DEALID  LEGID   ORIGID  DESCRIPTION
    -----------------------------------
        1       1        1           A
        2       1        2           A
    2 rows returned in 0.01 seconds
    
    insert into tt values (3, 1, 1, 'B');
    1 row(s) inserted.
    
    insert into tt values (4, 1, 1, 'B');
    1 row(s) inserted.
    
    select * from tt order by 1;
    
    DEALID  LEGID   ORIGID  DESCRIPTION
    -----------------------------------
         1      1        1           A
         2      1        2           A
         3      1        1           B
         4      1        1           B
    4 rows returned in 0.01 seconds 
      

    ご覧のとおり、一意のインデックスは、説明 ='A' のレコードでのみ機能します。これにより、さまざまな説明に対して一意でないレコードを使用できます。




    1. Postgres-テーブル名をパラメータとして渡し、結果をファイルに保存します

    2. SQLServer2005からのOracleストアドプロシージャの実行

    3. RをMySQLに接続する方法は?データベースへの接続に失敗しました:エラー:プラグインcaching_sha2_passwordをロードできませんでした

    4. 複数のクラスを持つPDO::FETCH_CLASS