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

ओरेकल एसक्यूएल में पीके का उल्लंघन

पोस्ट किया गया कोड एक ही स्टेटमेंट में कई पंक्तियों को सम्मिलित करने के लिए INSERT ALL सिंटैक्स का उपयोग करता है। यह प्रत्येक पंक्ति के लिए एक विशिष्ट पहचानकर्ता उत्पन्न करने के लिए अनुक्रम NEXTVAL का उपयोग करने का प्रयास करता है।

दस्तावेज बिल्कुल स्पष्ट है NEXTVAL के कामकाज पर:

इसलिए NEXTVAL को की जाने वाली प्रत्येक कॉल समान . लौटाएगी अनुक्रम से मूल्य, और इसलिए बयान ORA-00001 को नुकसान पहुंचाता है।

समस्या यह है कि ओपी का कोड मल्टी-टेबल इंसर्ट सिंटैक्स का दुरुपयोग कर रहा है। इसका उद्देश्य स्रोत डेटा के एक सेट से कई तालिकाओं में पंक्तियों को वितरित करना है, या सशर्त रूप से पंक्तियों को एक तालिका में हेरफेर करना है। किसी भी मामले में यह मानता है कि स्रोत डेटा में पहले से ही प्राथमिक कुंजी है।

इसके आसपास काम करने के कई तरीके हैं, आईडी को हार्डकोड करने से लेकर कई सिंगल टेबल इंसर्ट स्टेटमेंट का उपयोग करने तक।

इन तालिकाओं को पोस्ट किए गए डेटा से भरने का एक तरीका यहां दिया गया है:

insert into athlete (athlete_no, athlete_name, athlete_birthdate, athlete_birthplace, athlete_born_country, athlete_gender, athlete_height, athlete_weight, athlete_team_country)
select athlete_no_seq.nextval , nm, dt, pl, ctry, gn, ht, wt, tm
from (
    select 'Michael Phelps' nm, to_date('1985-06-30','yyyy-mm-dd') dt, 'Towson' pl, 'USA' ctry, 'M' gn, 193 ht, 88 wt, 'USA' tm from dual union all
    select 'Stephanie Rice', to_date('1988-06-17','yyyy-mm-dd'), 'Brisbane', 'AUS', 'F', 176, 67, 'AUS' from dual union all
    select 'Rebecca Adlington', to_date('1989-02-17','yyyy-mm-dd'), 'Mansfield', 'GBR', 'F', 179, 870, 'GBR' from dual union all
    select 'Lee Chong Wei', to_date('1982-10-21','yyyy-mm-dd'), 'Perak', 'MAS', 'M', 170, 60, 'MAS' from dual union all
    select 'Lin Dan', to_date('1983-10-14','yyyy-mm-dd'), 'Fujian', 'CHN', 'M', 176, 68, 'CHN' from dual union all
    select 'Peter Gade', to_date('1976-12-14','yyyy-mm-dd'), 'Aalborg', 'DEN', 'M', 183, 73, 'DEN' from dual
    )
/    

insert into competes (athlete_no, discipline_code, sg_gameno)
select ath.athlete_no, disc.discipline_code, 30
from athlete ath
     cross join discipline disc
where disc.discipline_name = 'Swimming'
/

insert into venue(venue_no, venue_name, venue_location, venue_usedfrom, venueused_to, venue_seatingcapacity, venue_structure, venue_use)
select venue_no_seq.nextval, nm, loc, dtf, dtt, cap, vs, vu
from (
    select 'Aquatics Centre' nm, 'Olympics Park, East London' loc, to_date('2012-07-28','yyyy-mm-dd') dtf, to_date('2012-10-08','yyyy-mm-dd') dtt, 17500 cap, 'N' vs, 'P' vu  from dual union all
    select 'Wembley Arena', 'North West London', to_date('2012-07-28','yyyy-,mm-dd'), to_date('2012-08-05','yyyy-mm-dd'), 6000, 'E', 'P'  from dual 
    )
/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वह डेटा खोजें जो अंग्रेज़ी टेक्स्ट नहीं है

  2. Oracle IN खंड में LIKE का उपयोग करना

  3. Oracle अधिकतम रिकॉर्ड प्राप्त करने के लिए

  4. Oracle Cloud Infrastructure (OCI) पर Cloudera CDP डेटा सेंटर परिनियोजित करें

  5. शीर्ष 30 सबसे उपयोगी समवर्ती प्रबंधक प्रश्न