2009-12-08 10 views
1

Je suis un oracle db 10g, voici une table comme un exempleoracle commettre tue

create table Dienstplan 
(
Montag Number(2), 
Dienstag Number(2), 
Mittwoch Number (2), 
Donnerstag Number (2), 
Freitag Number (2), 
Samstag Number (2), 
Sonntag Number (2), 
gueltigAb DATE default SYSDATE NOT NULL, 
PersonalNr Number(10) references Mitarbeiter(PersonalNr) INITIALLY DEFERRED DEFERRABLE, 
PRIMARY KEY (PersonalNr, gueltigAb), 
check (Montag <= 24), 
check (Dienstag <= 24), 
check (Mittwoch <= 24), 
check (Donnerstag <= 24), 
check (Freitag <= 24), 
check (Samstag <= 24), 
check (Sonntag <= 24) 
); 
/

maintenant le problème est que chaque fois que j'insérer une ligne (non exclusive à cette table) qui contient une clé étrangère (la référence est valide donc ce n'est pas ça) elle insère consciencieusement et dès que je commets tout le gâchis elle disparaît à nouveau.

INSERT INTO Dienstplan (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag, PersonalNr) values ('1', '2','3','4','5','6','7','1'); 

le botteur réel est que l'insert manuel sqldeveloper (insertion de la ligne - dialogue & commettras) fonctionne comme un charme, ce qui ne me permet pas du tout ...

toute aide est appréciée joie hoax

+1

Quel frontend/API/quoi utilisez-vous pour faire l'insertion et la validation qui échoue? –

+3

Mon pari serait que vous, pour une raison quelconque, bien que vous ne le croyez pas, insérez un PersonalNr inexistant, et puisque la contrainte est différée, l'erreur n'apparaît pas jusqu'à ce que vous validiez. – erikkallen

Répondre

4

Assurez-vous que vous ne masquez aucune exception de l'insertion ou de la validation. (Comme la contrainte FK est différée, vous obtiendrez une exception de la validation sur une violation FK.)

Comme suggestion de débogage plus générale, je dirais utiliser SQL Trace pour que vous puissiez voir exactement ce qui se passe.

+0

Je parierais sur le commit en levant une exception mais le langage d'application ne l'attend pas. –

1

Je suppose que votre interface utilisateur ne gère pas les exceptions correctement et l'insertion échoue pour une raison quelconque, mais vous n'êtes pas dit.

0

Une autre idée:

Si vous pensez que l'IDE est le masquage/cache/ne pas montrer l'exception correcte, pourquoi ne pas ajouter l'insert et l'engager dans Begin ... End (anonyme PL/SQL bloquer) et voir ce qui apparaît? Plus encore, un dbms_output dans le bloc d'exception fera aussi l'affaire. Mais le SQL Trace mentionné ci-dessus va certainement vous montrer ce qui se passe dans les coulisses, et pour autant que je comprends la trace SQL ne fonctionnera que pour les instructions PL/SQL, si cela est correct, vous devrez mettre le insérer et valider dans un bloc PL/SQL.