2015-06-11 2 views
0

Я хочу создать триггер, чтобы исправить какую-то ошибку внутри программы. В t2 есть разные строки, и программа объединяет выбранные вместе в t1 и дает им один единственный идентификатор. Таким образом, n-строки в t2 являются 1 строкой в ​​t1. Теперь я хочу ограничить, что вы можете поместить несколько строк в t2 вместе, когда клиент в t2 отличается. Когда это произойдет, триггер должен написать сообщение в текстовом поле в t1. До сих пор я получил это:Oracle Trigger с двумя таблицами

create or replace 
 
trigger multiple after insert on t1 
 
referencing new as new 
 
for each row 
 
declare count1 number; 
 

 
begin 
 
select count(distinct t2.customer) 
 
into count1 
 
from t2 
 
where trim(t2.id)= trim(:new.id); 
 
    
 

 
    if count1 >=2 
 
    then 
 
    
 
:new.txt_field :='Please delete.'; 
 
end if; 
 
end;

Но теперь есть проблема, то t2.id равна нулю в этой точке и будет обновляться шаг после в программе. Похоже, что программа вставляет объединенную строку в t1 с t1.id, а затем обновляет t2.id для каждой строки. Кто-нибудь понял, как я могу это решить?

Приветствие

+0

Не могли бы вы объяснить свой сценарий некоторыми тестовыми данными? – user1

+0

Почему бы не поставить триггер на t2? –

+0

Структура @Chandonne ddl, необходимая для t1 и t2 –

ответ

0

Здравствуйте, извините за поздний ответ и непонятный вопрос. Я сам решил этот вопрос. Я создал промежуточный стол с триггером, и это отлично работает для меня.

Благодарим вас за ввод.

0

вопрос не ясен, но, как я понимаю, у вас есть много, чтобы одно из соотношений t2 -> t1, и вы хотите один ряд должен вставить в t1, когда есть многоярусный вставляются на t2. решение для этого триггера уровня оператора put на t2, которое нужно удалить для каждого ключевого слова; также вам необходимо применить внутренний контрольный триггер, если эта запись доступна или нет в t1.

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