2009-06-15 5 views
0

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

ограничения автоматически отключение.

может у пожалуйста, помогите мне ..........

+0

Здесь необходимо прояснить поток событий. Какое ограничение вы добавляете? Когда он отключается? Является ли строка, которую вы вставляете, соответствует ограничению? и т. д. – GWLlosa

+0

Первоначально я определил внешний ключ для дочерней таблицы .. и проверил его статус .its enabled. при попытке вставить записи в эту таблицу статус ограничения отключен. – kishore

+0

почтовый код ограничения и данные вставки образца – jle

ответ

1

Ограничение не может «автоматически» отключить - проверить его текущее состояние, выполнив эту SQL (как владелец таблицы/ограничения):

выберите статус, заверенный из user_constraints где constraint_name = «theNameOfYourConstraint»

это может быть так, что она была отключена до операции. Он останется в этом состоянии до тех пор, пока он не будет включен.

[Дополнительный]

Я вижу более позднего комментарий теперь, что отключение по-видимому, из-за прямую загрузку в SQL * Loader. Если вы хотите предотвратить это, я думаю, что ваш единственный вариант - использовать обычную нагрузку и обрабатывать исключения. Привязка файла к определению внешней таблицы позволит вам использовать более процедурный подход, поскольку вы можете обрабатывать файл так, как если бы это была таблица Oracle.

Из документов Oracle:

Ограничения целостности, которые зависят от других строк или таблиц, таких как ограничения ссылочных, отключено до прямого пути и нагрузок необходимо снова включить после этого.

+0

Я проверил перед вставкой данных ...... .... ограничение включено. , но когда я вставляю данные в эту таблицу, это ограничение автоматически переходит в состояние отключения. – kishore

+0

Итак, я понимаю, что последовательность событий такова: 1) вы можете посмотреть ограничение с помощью sql выше и увидеть статус включенным. 2) вы выполните вставку 3) вы снова запустите sql против user_constraints и увидите статус как отключенный ? – dpbradley

+0

да точно ......... – kishore

0

Вы должны предоставить нам дополнительную информацию/код. Опишите свое ограничение. Как вы вставляете записи?

  • вставки заявление
  • вызова процедуры
  • SqL погрузчик
  • т.д.

Воспроизведите проблему:

select * 
from user_constraints 
where constraint_name = 'theNameOfYourConstraint'; 

do your insert here 

select * 
from user_constraints 
where constraint_name = 'theNameOfYourConstraint'; 

и показать нам выход.

+0

фактически работает, когда вставляю данные, используя обычные вставки. , но вышеприведенная проблема возникает, когда я вставляю данные с помощью загрузчика sql. – kishore

+0

Это своего рода важная деталь. http://download-west.oracle.com/docs/cd/B13789_01/server.101/b10825/ldr_modes.htm#i1008078 С обычным методом загрузки пути массивы строк вставляются со стандартными операторами SQL INSERT - автоматически устанавливаются ограничения интеграции и триггеры вставки. Но когда вы загружаете данные прямым путем, SQL * Loader отключает некоторые ограничения целостности и все триггеры базы данных. В этом разделе обсуждаются последствия использования прямых дорожных нагрузок по этим функциям. –

1

В руководстве Utilties реляционная целостность и контрольные ограничения автоматически отключены для прямых нагрузок. У обычного пути не должно быть этой проблемы.

Существует предложение REENABLE, чтобы включить ограничения в конце нагрузки прямого пути.

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