Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle APEX - Tabel Pencarian dengan beberapa tautan

Saat Anda membuat tabel pencarian di SQL Workshop, APEX menghasilkan beberapa pernyataan DDL dan DML untuk melakukan pekerjaan itu. Pada langkah terakhir wizard, Anda harus dapat memperluas wilayah SQL di bagian bawah untuk melihat kodenya. Sayangnya, itu tidak keluar dengan format yang baik, tetapi tidak terlalu sulit untuk dibersihkan.

Sebagai ujian, saya masuk dan membuat tabel pencarian di kolom JOB dari tabel EMP. Berikut kode yang dihasilkan. Saya telah memformatnya dan menambahkan komentar untuk menjelaskan bagian yang Anda perlukan dan yang tidak.

/*
* 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");

Untuk pernyataan sisipan yang mengisi tabel pencarian, inilah versi modifikasi yang Anda perlukan:

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
  );

Itu akan memastikan hanya nilai baru dan unik yang ditambahkan ke tabel pencarian.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memuat data dari file teks ke tabel di oracle

  2. Klausa IN untuk Pernyataan yang Disiapkan Oracle dengan Python cx_Oracle

  3. C# dan Tipe Data Nomor Oracle

  4. Jalankan dbms_mview.refresh dari CodeIgniter

  5. PLS-00306:nomor atau jenis argumen yang salah dalam panggilan ke 'OUTPUT_ARRAY'