ho avuto un vincolo in una tabellaTrovare vincolo fantasma da Oracle DB
CREATE TABLE "USERSAPPLICATIONS" (
"USERID" NUMBER NOT NULL ,
"APPLICATIONNAME" VARCHAR2 (30) NOT NULL ,
CONSTRAINT "PK_USERSAPPLICATIONS" PRIMARY KEY ("USERID","APPLICATIONNAME")
)
/
Due settimane fa ho modificato il tavolo, ha aggiunto alcune colonne, cancellato le "PK_USERSAPPLICATIONS" vincolo e ha aggiunto una chiave surrogata. Posso vedere in Oracle SQL Developer che il vincolo PK_USERSAPPLICATIONS non esiste più.
Indipendentemente da questo, quando provo ad aggiungere due voci con la stessa combinazione userid/applicationName, ottengo un errore
SQL Error: ORA-00001: unique constraint (ACCOUNTMP1.PK_USERSAPPLICATIONS) violated
00001. 00000 - "unique constraint (%s.%s) violated"
*Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
For Trusted Oracle configured in DBMS MAC mode, you may see
this message if a duplicate entry exists at a different level.
*Action: Either remove the unique restriction or do not insert the key.
Quando eseguo la dichiarazione
SELECT *
FROM user_cons_columns
WHERE constraint_name = 'PK_USERSAPPLICATIONS'
ottengo zero righe . Come può essere? Oracle non dovrebbe avere alcuna conoscenza del vincolo PK_USERSAPPLICATIONS come è stato cancellato già settimane fa, e non posso vederlo neanche nel database.
+1. Spot on. Non ho mai pensato in questo modo. – Guru
Risposta molto buona e completa. Era così - stupidamente l'indice era chiamato esattamente come il vincolo nel mio caso. – simon
Grazie. Dopo aver trovato l'indice, lo rilasciamo usando un altro script DROP INDEX PK_USERSAPPLICATIONS; – Coisox