Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Batasan unik ORA-00001 dilanggar

ORA-00001 batasan unik yang dilanggar adalah salah satu pesan umum yang sering kita dapatkan saat memuat data.

Error pelanggaran batasan unik ORA-00001 ini terjadi saat Anda mencoba menjalankan pernyataan INSERT atau UPDATE yang telah membuat nilai duplikat di kolom yang dibatasi oleh indeks unik.

Periksa daftar untuk dijalankan untuk menyelesaikan ORA-00001

Kami dapat melakukan item tindakan berikut untuk ORA-00001 ini

(1) Anda dapat melihat kesalahan dan menemukan informasi kendala dengan sql di bawah ini

SELECT column_name, position
FROM all_cons_columns
WHERE constraint_name = '<name of the constraint in error>'
AND owner = '<table owner>'
AND table_name = '<table name>'

Sekarang kita dapat memeriksa data yang ada dengan data yang kita masukkan dan kemudian mengambil tindakan yang sesuai. Anda dapat mengubah kunci agar dapat disisipkan

CREATE TABLE EXAMPLE_UNIQ(
EXAM_ID NUMBER NOT NULL ENABLE,
EXAM_NAME VARCHAR2(250) NOT NULL ENABLE
CONSTRAINT UK1_EXAMPLE UNIQUE (EXAM_ID, EXAM_NAME) ENABLE
);
table created.

INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1000, 'XYZ');
1 rows inserted.
Commit;

INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1000, 'XYZ');
SQL Error: ORA-00001: unique constraint (UK1_EXAMPLE) violated
Solution
INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1001, 'XYZ');
1 rows inserted.

(2)  Kami dapat menghapus batasan jika duplikat diizinkan di tabel

Contoh

alter table <table name> drop constraint <constraint name>;

(3) Petunjuk 11gr2 mengabaikan_row_on_dupkey_index memungkinkan pernyataan mengabaikan kesalahan ORA-00001 secara diam-diam.

  • Petunjuk IGNORE_ROW_ON_DUPKEY_INDEX tidak seperti petunjuk lainnya karena memiliki efek semantik. Filosofi umum yang dijelaskan dalam "Petunjuk" tidak berlaku untuk ketiga petunjuk ini.
  • Petunjuk IGNORE_ROW_ON_DUPKEY_INDEX hanya berlaku untuk operasi INSERT tabel tunggal. Ini tidak didukung untuk operasi penyisipan UPDATE, DELETE, MERGE, atau multitable. IGNORE_ROW_ON_DUPKEY_INDEX menyebabkan pernyataan mengabaikan pelanggaran kunci unik untuk kumpulan kolom tertentu atau untuk indeks tertentu. Ketika pelanggaran kunci unik ditemukan, rollback tingkat baris terjadi dan eksekusi dilanjutkan dengan baris input berikutnya. Jika Anda menentukan petunjuk ini saat memasukkan data dengan log kesalahan DML diaktifkan, maka pelanggaran kunci unik tidak dicatat dan tidak menyebabkan penghentian pernyataan.

Efek semantik dari petunjuk ini menghasilkan pesan kesalahan jika aturan tertentu dilanggar:

  • Jika Anda menentukan indeks, maka indeks harus ada dan unik. Jika tidak, pernyataan tersebut menyebabkan ORA-38913.
  • Anda harus menentukan tepat satu indeks. Jika Anda tidak menentukan indeks, maka pernyataan tersebut menyebabkan ORA-38912. Jika Anda menentukan lebih dari satu indeks, maka pernyataan tersebut menyebabkan ORA-38915.
  • Anda dapat menentukan petunjuk CHANGE_DUPKEY_ERROR_INDEX atau IGNORE_ROW_ON_DUPKEY_INDEX dalam pernyataan INSERT, tetapi tidak keduanya. Jika Anda menentukan keduanya, maka pernyataan tersebut menyebabkan ORA-38915.
  • Seperti semua petunjuk, kesalahan sintaks dalam petunjuk menyebabkannya diabaikan secara diam-diam. Hasilnya adalah ORA-00001 akan muncul, seolah-olah tidak ada petunjuk yang digunakan.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */
into
unique_table
(select * from non_unique_table);

Artikel terkait

ORA-00911:karakter tidak valid
ORA-03113:akhir file pada saluran komunikasi
ORA-00257
ORA-29285:kesalahan penulisan file
ORA-29913 dengan tabel eksternal
menghapus kueri di Oracle
https://docs.Oracle.com/cd/E11882_01/server.112/e17766/e0.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NVL() Fungsi di Oracle

  2. Parameter batas waktu IDLE di Oracle

  3. Bagaimana cara mendapatkan tahun berjalan menggunakan SQL di Oracle?

  4. LN() Fungsi di Oracle

  5. Kesalahan koneksi localhost Java Oracle (ORA-12505)