Форум: "Базы";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
ВнизFOREIGN KEY Найти похожие ветки
← →
DenK_vrtz (2003-09-25 15:57) [0]Всем привет
Есть две таблицы
схема A
create table RASHOD
(
ITEM_ID NUMBER(12) not null,
PACKET_RNO NUMBER(9,2) null ,
constraint PK_SGP_RASHOD primary key (ITEM_ID)
)
и
Схема B
create table PRIHOD_PT
(
ID NUMBER not null,
RASHOD_TESC_ID NUMBER(12) not null,
constraint PK_NKT_PRIHOD_PT primary key (ID),
FK_RASHOD_TESC_PT FOREIGN KEY (RASHOD_TESC_ID) REFERENCES A.RASHOD (ITEM_ID)
)
которые лежат в разных схемах, все превилегии выданы!
Триггер на insert таблицы RASHOD одновременно вставляет данные в PRIHOD_PT.
В 8.1.6. все проходит без ошибок, а в 8.0.5. ругается, что таблица RASHOD мутирующая (table A.RASHOD is mutatig, trigger/function may not see it)
В чем разница?
Заранее спасибо!
← →
DenK_vrtz (2003-09-25 16:05) [1]в догонку
сделал в 8.0.5 Disable констрейнту FK_RASHOD_TESC_PT и ошибка исчезла
← →
Johnmen (2003-09-25 16:10) [2]См.документацию, в частности директиву прекомпилятору
PRAGMA RESTRICT_REFERENCES
← →
Vlad (2003-09-25 16:18) [3]>Johnmen © (25.09.03 16:10) [2]
Ни разу не пробовал прагму в триггере использовать...
Такое бывает ?
← →
Johnmen (2003-09-25 16:23) [4]Почему бы и нет ?
Стоит попробовать...:)
← →
DenK_vrtz (2003-09-26 08:05) [5]Спасибо за ответы.
Вчера не смог ответить инет вырубился.
Johnmen ©, попробую. Честно сказать, как и Vlad ©, никогда прагму в триггере не использовал. Будет повод!
Одного понять не могу.
Почему в 8.0.5. не явно срабатывает констрейнт FOREIGN KEY (т.е. нет ошибки по вторичному ключу), хотя транзакция еще не закончилась? Обычно, ошибка мутирующих таблиц возникает, когда в триггере на update пытаешься сделать select из этой же таблицы.
В чем разница с 8.1.6. ? В ней же нет ошибки!
← →
Sergey13 (2003-09-26 09:14) [6]А можно на сам тригер глянуть?
← →
DenK_vrtz (2003-09-26 09:40) [7]create or replace trigger RASHOD_BEF_INS before insert
on RASHOD for each row
declare
begin
--тут несколько селектов для проверки
select sq_rashod.nextval into :new.item_id from dual;
if :new.PACKET_RNO is not null then
insert into B.PRIHOD_PT (RASHOD_TESC_ID)
values(:new.item_id);
end if;
end;
/
show errors
← →
DenK_vrtz (2003-09-26 09:46) [8]Теоретически 8.0.5. делает правильно выдавая ошибку!
Но почему не ругается 8.1.6.?!
← →
DenK_vrtz (2003-09-26 10:00) [9]А может 8.1.6. по сравнению с 8.0.5. мегамозг? :-)
← →
DenK_vrtz (2003-09-26 10:05) [10]Во как!
В триггере на DELETE таблицы RASHOD идут проверки, а затем удаляется(или не удаляется) соответствующая строчка в PRIHOD_PT.
ВНИМАНИЕ! В 8.1.6. ошибок как не было, так и нет, а в 8.0.5. ошибка вторичного ключа.
Уверяю всех, что наличие в обеих базах ключей, констрейнтов и индексов на таблицы АБСОЛЮТНО одинаково.
Мистика какая то!
← →
Sergey13 (2003-09-26 10:06) [11]А если вставлять не :new.item_id а sq_rashod.curval?
Ругается то он на мутацию, а не на нарушение ключа, как я понял.
← →
Johnmen (2003-09-26 10:07) [12]>DenK_vrtz ©
Я так думаю, что в более поздней версии они просто устранили данную фичу (а где-то даже и баг). И не более того...:)
← →
DenK_vrtz (2003-09-26 10:20) [13]Johnmen ©, вот я тоже это подозреваю. Ведь разбор полетов идет на уровне транзакции, поэтому 8.1.6. думает, что вставлять (удалять) первой в зависимости от ссылочной целостности, а 8.0.5. видимо не думает :-)
Прочитал в умной книге по 8.0.5., что при вставке данных в главную таблицу вся подчиненная таблица блокируется в разделяемом режиме.
>Sergey13 ©. Сергей, а что это меняет?!
← →
Sergey13 (2003-09-26 11:05) [14]2DenK_vrtz © (26.09.03 10:20) [13]
>Сергей, а что это меняет?!
Это я пытаюсь давать шаманские советы с похмелья. 8-)
Хотя... Мутация - это когда ссылаешься на поле изменяемой таблицы. :new.pole это конечно не совсем поле, но все таки. А вставляя переменную ты вообще как бы независим от таблицы.
>Прочитал в умной книге по 8.0.5., что при вставке данных в главную таблицу вся подчиненная таблица блокируется в разделяемом режиме.
Это вроде только если нет индекса на форинкейное поле.
А инит.ора для обеих баз одинаков? Интересно просто.
← →
DenK_vrtz (2003-09-26 11:20) [15]>А инит.ора для обеих баз одинаков?
Разница, говорят, есть. А что конкретно интересно?
← →
Sergey13 (2003-09-26 11:29) [16]2DenK_vrtz © (26.09.03 11:20) [15]
>Разница, говорят, есть. А что конкретно интересно?
Да я так просто, говорю же с похмелья. 8-)
Я не помню точно, но вроде были какие то параметры по транзакциям которыми можно порулить. Но это ковыряться надо, вспоминать. А мне тяжко. К тому же это может и вообще не из той оперы и все сказал Johnmen © (26.09.03 10:07) [12] .
← →
DenK_vrtz (2003-09-26 12:18) [17]Sergey13 ©, в общем проблема решаема! :-)
Уже победил!
Всем спасибо!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c