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

PK vi phạm trong sql oracle

Mã đã đăng sử dụng cú pháp CHÈN TẤT CẢ để chèn nhiều hàng trong một câu lệnh. Nó cố gắng sử dụng trình tự NEXTVAL để tạo số nhận dạng duy nhất cho mỗi hàng.

tài liệu khá rõ ràng về hoạt động của NEXTVAL:

Vì vậy, mỗi cuộc gọi đến NEXTVAL sẽ trả về giống nhau giá trị từ chuỗi, và do đó, câu lệnh ném ORA-00001.

Vấn đề là mã của OP đang sử dụng sai cú pháp chèn nhiều bảng. Nó nhằm phân phối các hàng từ một tập dữ liệu nguồn trên nhiều bảng hoặc thao tác có điều kiện các hàng thành một bảng. Trong cả hai trường hợp, nó giả định dữ liệu nguồn đã có khóa chính.

Có nhiều cách khác nhau để giải quyết vấn đề này, từ mã hóa cứng ID đến sử dụng nhiều câu lệnh chèn bảng duy nhất.

Đây là một cách để điền các bảng này với dữ liệu đã đăng:

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. Tìm kiếm Văn bản trong Quy trình Lưu trữ Oracle

  2. Chênh lệch tích lũy

  3. Cập nhật Salesforce từ Oracle®

  4. PK vi phạm trong sql oracle

  5. regexp cho tất cả các ký tự có dấu trong Oracle