Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle APEX - Bảng tra cứu với một số liên kết

Khi bạn tạo bảng tra cứu trong SQL Workshop, APEX tạo một số câu lệnh DDL và DML để thực hiện công việc. Trong bước cuối cùng của trình hướng dẫn, bạn sẽ có thể mở rộng vùng SQL ở dưới cùng để xem mã. Thật không may, nó không có định dạng tốt, nhưng không quá khó để làm sạch.

Để kiểm tra, tôi đã vào và tạo một bảng tra cứu trên cột CÔNG VIỆC của bảng EMP. Đây là mã đã được tạo. Tôi đã định dạng nó và thêm nhận xét để giải thích những phần bạn sẽ cần và những phần bạn sẽ không.

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

Đối với câu lệnh chèn điền bảng tra cứu, đây là phiên bản đã sửa đổi bạn sẽ cần:

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

Điều đó sẽ đảm bảo chỉ các giá trị mới, duy nhất được thêm vào bảng tra cứu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL * Plus có thể đọc các biến môi trường từ máy đang chạy không?

  2. Gợi ý Oracle WITH và MATERIALIZE hoạt động như một giao dịch tự trị cho các hàm

  3. Truy vấn hai bảng từ các giản đồ khác nhau

  4. Làm thế nào để tải tập lệnh bảng trong Oracle SQL Developer?

  5. Triển khai cx_Oracle trên các phiên bản khác nhau của Oracle Client