trigger instead of. Возвращаемое значение.

avb1003
Дата: 10.12.2007 14:15:19
Имеется представление vv на основе объединения двух таблиц bt_1 и bt_2 и
триггер "instead of delete":
set echo on
spool quest.log
drop table bt_1;
create table bt_1 (a number,b number);
drop table bt_2;
create table bt_2 (a number,b number);
create or replace view vv as (
select * from bt_1
union all
select * from bt_2);
create or replace trigger vv_del_trig
instead of delete on vv
        for each row
        begin
                delete from bt_1 where a=:old.a;
        end;
/
После прогона теста:
insert into bt_1 values(1,1);
insert into bt_1 values(3,3);
insert into bt_2 values(2,2);
insert into bt_2 values(4,4);
commit;
select * from vv;
delete from vv where a=1;
select * from vv;
delete from vv where a=2;
select * from vv;



sqlplus scott/tiger
...
Присоединен к:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
...
scott@ora10g>@quest


Получаем:

...
Фиксация обновлений завершена.

bav@ora10g> select * from VV;

A B
---------- ----------
1 1
3 3
2 2
4 4

scott@ora10g> delete from VV where a=1;

1 строка удалена.


scott@ora10g> select * from VV;

A B
---------- ----------
3 3
2 2
4 4

scott@ora10g> delete from VV where a=2;

1 строка удалена.

scott@ora10g> select * from VV;

A B
---------- ----------
3 3
2 2
4 4

scott@ora10g> exit
...
Что нужно добавить в триггер (или еще куда нибудь), чтобы во втором случае получалось
бы правильное значение удаленных строк(то есть 0) ?
Заранее спасибо.
ERROR MESSAGE
Дата: 10.12.2007 14:24:24
А ты нам, мил человек, расскажи чем тебе не нравится то, как сейчас работает.
И ещще ознакомь публику с тем, как ты это использовать мечтаешь?
Jannny
Дата: 10.12.2007 14:57:20
В триггере надо удалять из обоих таблиц
ERROR MESSAGE
Дата: 10.12.2007 15:04:18
Jannny
В триггере надо удалять из обоих таблиц
Не фантазируй, сударушка.
Пусть avb1003 сам отвечает на вопросы.
avb1003
Дата: 10.12.2007 15:18:48
ERROR MESSAGE
А ты нам, мил человек, расскажи чем тебе не нравится то, как сейчас работает.
И ещще ознакомь публику с тем, как ты это использовать мечтаешь?

А почему нельзя ? Вот так вот и хочу использовать. Есть уже много кода работающего с VV
как с таблицей (И еще с рядом аналогичных или совсем других таблиц ).
Код сырой настолько , что на него нет даже письменных спецификаций.
Для простоты почти все тесты запускаются "c нуля", чтобы не разбираться, что
напортила очередная ошибка. Между тем есть идеи, что наша жизнь упростится
если в таблице VV будут содержаться определенные, почти фиксированные данные.
Загрузка этих данных у меня сейчас занимает сутки. Поэтому вот так вот и мечтаю:
Запускать старые тесты и иметь постоянную, уже загруженную часть.
Естественно хочется чтобы все было "по-настоящему", без модификации уже написанного
кода.

Jannny
В триггере надо удалять из обоих таблиц
Понятно, что мне это не
подходит. На всякий случай я уже проверил добавку в триггер
delete from bt_2 where 1=2;
Jannny
Дата: 10.12.2007 15:23:41
Пардон, это был ответ на примере, а не на вопрос :)

Не снимая вопрос - чем так травмирует,
avb1003
Что нужно добавить в триггер (или еще куда нибудь), чтобы во втором случае получалось
бы правильное значение удаленных строк(то есть 0) ?
ничего не получится - отображается, к скольким строкам представления применена операция удаления (вне зависимости от того, как именно Вы ее(операцию) потом трансформировали)
ERROR MESSAGE
Дата: 10.12.2007 15:27:54
avb1003
ERROR MESSAGE
А ты нам, мил человек, расскажи чем тебе не нравится то, как сейчас работает.
И ещще ознакомь публику с тем, как ты это использовать мечтаешь?

А почему нельзя ? Вот так вот и хочу использовать. Есть уже много кода работающего с VV
как с таблицей (И еще с рядом аналогичных или совсем других таблиц ).
Код сырой настолько , что на него нет даже письменных спецификаций.
Для простоты почти все тесты запускаются "c нуля", чтобы не разбираться, что
напортила очередная ошибка. Между тем есть идеи, что наша жизнь упростится
если в таблице VV будут содержаться определенные, почти фиксированные данные.
Загрузка этих данных у меня сейчас занимает сутки. Поэтому вот так вот и мечтаю:
Запускать старые тесты и иметь постоянную, уже загруженную часть.
Естественно хочется чтобы все было "по-настоящему", без модификации уже написанного
кода.
Твой поток сознания не принес никакой информации.
Ты, мил человек, зачем-то рассказал про свои общие беды - бог с ними.

Прояняю по-простому:
Расскажи что ты хочешь увидеть / получить, выполнив приведенные тобой команды.
Не стесняйся, считай, что вокруг тебя собрались полные дебилы в точных науках
(люди с гуманитакрным складом ума) и на пальцах-примерах объясни доходчиво,
что именно ты хочешь получить.
avb1003
Дата: 10.12.2007 15:30:21
Jannny
Пардон, это был ответ на примере, а не на вопрос :)

Не снимая вопрос - чем так травмирует,
avb1003
Что нужно добавить в триггер (или еще куда нибудь), чтобы во втором случае получалось
бы правильное значение удаленных строк(то есть 0) ?
ничего не получится - отображается, к скольким строкам представления применена операция удаления (вне зависимости от того, как именно Вы ее(операцию) потом трансформировали)

Это ответ. Спасибо.
Jannny
Дата: 10.12.2007 15:36:01
avb1003
Jannny
ничего не получится
Это ответ. Спасибо.
Не, ну если Вам нужно только увидеть, то можно дописать
dbms_output.put_line('На самом деле - '||sql%rowcount);
в триггер
avb1003
Дата: 10.12.2007 15:43:08
ERROR MESSAGE

..........

Твой поток сознания не принес никакой информации.
Ты, мил человек, зачем-то рассказал про свои общие беды - бог с ними.

Прояняю по-простому:
Расскажи что ты хочешь увидеть / получить, выполнив приведенные тобой команды.
Не стесняйся, считай, что вокруг тебя собрались полные дебилы в точных науках
(люди с гуманитакрным складом ума) и на пальцах-примерах объясни доходчиво,
что именно ты хочешь получить.

Ну извините ради бога. Нету времени, чтобы еще более доходчиво.
Jannny
avb1003
Jannny
ничего не получится
Это ответ. Спасибо.
Не, ну если Вам нужно только увидеть, то можно дописать
dbms_output.put_line('На самом деле - '||sql%rowcount);
в триггер

Еще раз спасибо. Но честное, слово про dbms_output.put_line я уже давно знаю.