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

Phương pháp khai báo để giới hạn phạm vi dữ liệu trong bảng

Trong khi chờ đợi phiên bản Oracle 12c tiếp theo, hỗ trợ Temporal Hiệu lực , Tôi vẫn sử dụng phương pháp tiếp theo:

create table item ( title varchar2(32) primary key );
create table price ( 
   price_id          number primary key,
   item              varchar2(32) not null references item (title), 
   price             number(9,2), 
   effective_from    date not null, 
   effective_to      date not null, 
   effective_prev_to date,
   constraint price_from_to_ck check ( effective_to > effective_from ),
   constraint price_to_prev_ck check ( effective_from = effective_prev_to + 1 ),
   constraint price_from_uq unique ( item, effective_to ),
   constraint price_dates_chain_fk foreign key ( item, effective_prev_to ) references price ( item, effective_to ) );

insert into item values ('LETTUCE');
insert into item values ('WHISKY');

insert into price values ( 1, 'LETTUCE', 1.05, date '2013-01-01', date '2013-03-31', null );
insert into price values ( 2, 'LETTUCE', 1.08, date '2013-04-01', date '2013-06-30', date '2013-03-31' ); 
insert into price values ( 3, 'WHISKY', 33.99, date '2013-01-01', date '2013-05-31', null );
insert into price values ( 4, 'WHISKY', 31.15, date '2013-06-01', date '2013-07-31', date '2013-05-31' ); 

Hãy thử :

insert into price values ( 5, 'WHISKY', 30.55, date '2013-05-15', date '2013-06-05', date '2013-05-14' ); 

ORA-02291: integrity constraint (USER_4_E7DF1.PRICE_DATES_CHAIN_FK) violated - parent key not found : insert into price values ( 'WHISKY', 30.55, date '2013-05-15', date '2013-06-05', date '2013-05-14' )

Nhưng bây giờ cập nhật và xóa ngày ở giữa chuỗi là đau đớn trong ass. Nó cần thay đổi các hàng trước và sau trong một câu lệnh với MERGE . Đó là lý do tại sao tôi đã thêm price_id vì bạn không thể cập nhật khóa trong MERGE - vì vậy, bạn cần một khóa khác thay vì (item, effect_%).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển danh sách ngày tháng vào hàm oracle db qua java

  2. Oracle Apex 5 - Thanh chân trang giống như thanh trong Trình tạo ứng dụng

  3. Create_record biểu mẫu tiên tri

  4. Kết nối với DB oracle thông qua C

  5. Làm cách nào để tôi có thể chèn nhiều hàng vào oracle với một giá trị thứ tự?