Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

तालिका में डेटा श्रेणियों को सीमित करने के लिए घोषणात्मक दृष्टिकोण

अगले Oracle 12c संस्करण की प्रतीक्षा करते हुए, जो Temporal का समर्थन करता है वैधता , मैं अभी भी अगले दृष्टिकोण का उपयोग करता हूं:

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

आइए कोशिश करें :

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

लेकिन अब चैन के बीच में तारीखों को अपडेट और डिलीट करना कमर में दर्द है। इसे MERGE . के साथ एक स्टेटमेंट में पूर्ववर्ती और निम्नलिखित पंक्तियों को बदलने की आवश्यकता है . इसलिए मैंने price_id जोड़ा है कॉलम, क्योंकि आप MERGE . में एक कुंजी अपडेट नहीं कर सकते -- इसलिए, आपको (आइटम, प्रभावी_%) के बजाय दूसरी कुंजी की आवश्यकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ojdbc जार फ़ाइल कहाँ है

  2. नाम स्थान (,) में एक से अधिक तालिकाएँ मिलीं - SchemaExtractionException

  3. एक स्पष्ट कर्सर का SQL कथन लौटाएँ

  4. स्प्रिंग डेटा जेपीए के साथ संग्रहित प्रक्रिया को कॉल करते समय सरणी में कैसे पास करें?

  5. Windows XP 32 बिट पर Windows Server 2003 64 बिट के लिए विकास करना