Oracle
 sql >> база данни >  >> RDS >> Oracle

PK е нарушен в oracle sql

Публикуваният код използва синтаксиса INSERT ALL за вмъкване на множество редове в един оператор. Той се опитва да използва последователност NEXTVAL, за да генерира уникален идентификатор за всеки ред.

документацията е доста ясна относно функционирането на NEXTVAL:

Така че всяко от тези извиквания към NEXTVAL ще върне същото стойност от последователността и така операторът изхвърля ORA-00001.

Проблемът е, че кодът на OP използва неправилно синтаксиса за вмъкване на множество таблици. Предназначен е за разпределяне на редове от един набор от изходни данни в няколко таблици или условно манипулиране на редовете в една таблица. И в двата случая се приема, че изходните данни вече имат първичен ключ.

Има различни начини за заобикаляне на това, от твърдо кодиране на идентификатора до използване на множество изрази за вмъкване на една таблица.

Ето един начин за попълване на тези таблици с публикуваните данни:

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. Как да създадете PL/SQL съхранени процедури без параметри в базата данни на Oracle

  2. Как да видите изображение от колона blob в Oracle с JasperReports?

  3. Как да видите всички метаданни на колони на таблица в база данни на oracle?

  4. Заявка за намиране на пълни сканирания на таблицата в oracle

  5. създаване на SQL скрипт