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

OracleAPEX-いくつかのリンクを含むルックアップテーブル

    SQL Workshopでルックアップテーブルを作成すると、APEXはそのジョブを実行するためにいくつかのDDLおよびDMLステートメントを生成します。ウィザードの最後のステップで、下部のSQL領域を展開してコードを表示できるはずです。残念ながら、フォーマットは適切ではありませんが、クリーンアップするのはそれほど難しくありません。

    テストとして、EMPテーブルのJOB列にルックアップテーブルを作成しました。生成されたコードは次のとおりです。フォーマットし、必要な部分と不要な部分を説明するコメントを追加しました。

    /*
    * Creates the lookup table. Not needed after the first pass.
    */
    create table "JOB_LOOKUP"(
      "JOB_ID" number not null primary key, 
      "JOB" varchar2(4000) not null
    );
    
    /*
    * Creates the sequence for the primary key of the lookup table. 
    * Not needed after the first pass.
    */
    create sequence "JOB_LOOKUP_SEQ";
    
    /*
    * Creates the trigger that links the sequence to the table.
    * Not needed after the first pass. 
    */
    create or replace trigger "T_JOB_LOOKUP" 
    before insert or update on "JOB_LOOKUP" 
    for each row 
    begin 
    if inserting and :new."JOB_ID" is null then 
      for c1 in (select "JOB_LOOKUP_SEQ".nextval nv from dual) loop 
        :new."JOB_ID" := c1.nv;   end loop; end if; 
    end;
    /
    
    /*
    * Inserts the distinct values from the source table into the lookup
    * table. If the lookup table already contains ALL of the needed values,
    * country names in your case, then you can skip this step. However, if
    * the source table has some values that are not in the lookup table, then
    * you'll need to execute a modified version of this step. See notes below.
    */
    insert into "JOB_LOOKUP" ( "JOB" ) 
    select distinct "JOB" from "DMCGHANTEST"."EMP"
    where "JOB" is not null;
    
    /*
    * The rest of the statements add the foreign key column, populate it,
    * remove the old column, rename the new column, and add the foreign key.
    * All of this is still needed.
    */
    alter table "EMP" add "JOB2" number;
    
    update "EMP" x set "JOB2" = (select "JOB_ID" from "JOB_LOOKUP" where "JOB" = x."JOB");
    
    alter table "EMP" drop column "JOB";
    alter table "EMP" rename column "JOB2"  to "JOB_ID";
    alter table "EMP" add foreign key ("JOB_ID") references "JOB_LOOKUP" ("JOB_ID");
    

    ルックアップテーブルに入力する挿入ステートメントについては、必要な変更バージョンは次のとおりです。

    insert into "JOB_LOOKUP" ( "JOB" ) 
    select distinct "JOB" from "DMCGHANTEST"."EMP"
    where "JOB" is not null
      and "JOB" not in (
        select "JOB"
        from JOB_LOOKUP
      );
    

    これにより、新しい一意の値のみがルックアップテーブルに追加されます。




    1. CSVをAmazonRDSでホストされているPostgresqlデータベースにコピーする

    2. phpリストビュー(表)の検索データに選択ボックスを使用する方法

    3. 5秒以内にhibernateを使用してmysqlに100000行を挿入する必要があります

    4. 参照整合性の中断を確認します