2009-12-08 2 views
1

я получил Oracle DB 10g, здесь таблицу в качестве примераоракула совершить убийство

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) 
); 
/

теперь проблема в том, что всякий раз, когда я вставить строку (не только для этой таблицы), которая содержит внешний ключ (ссылка действительна, так что это не так), он вставляет послушно, и как только я совершу весь беспорядок, он снова исчезает.

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

реальный футболист является то, что ручной вставки в SQLDeveloper (вставка строки - диалоговое & фиксации) работает как шарм, который не помогает мне во всем ...

любая помощь ценится развеселить hoax

+1

Какой интерфейс/API/что вы используете для вставки и фиксации, которые не выполняются? –

+3

Моя ставка будет заключаться в том, что вы по какой-то причине, хотя вы не думаете, вставьте несуществующий PersonalNr, и поскольку ограничение отложено, ошибка не появляется до тех пор, пока вы не зафиксируете. – erikkallen

ответ

4

Убедитесь, что вы не скрываете никаких исключений ни из вставки, ни из фиксации. (Так как ограничение FK отложено, вы получите исключение из фиксации при нарушении FK.)

Как более общее предложение отладки, я бы сказал, используя SQL Trace, чтобы вы могли точно видеть, что происходит.

+0

Я бы поставил на фиксацию, создающую исключение, но язык приложения не ожидает этого. –

1

Я предполагаю, что ваш пользовательский интерфейс неправильно обрабатывает исключения, а вставка почему-то терпит неудачу, но вам не говорят.

0

Еще одна идея:

Если вы считаете, что IDE маскирует/скрытие/не показывать надлежащего исключения, почему бы вам не добавить вставку и совершить в Begin ... End (анонимный PL/SQL блок) и посмотреть, какие попсы? Более того, dbms_output в блоке исключений тоже сделает трюк.

Но, конечно, упомянутая выше ссылка SQL Trace покажет вам, что происходит за кулисами, и насколько я понимаю, трассировка SQL будет работать только для операторов PL/SQL, если это правильно, вам нужно будет поставить вставить и зафиксировать в блоке PL/SQL.

Смежные вопросы