powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в триггере [b]втихую[/b] отменить вставку строки (v.2)
3 сообщений из 3, страница 1 из 1
Как в триггере [b]втихую[/b] отменить вставку строки (v.2)
    #32163506
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал /topic/32357 и задался вопросом -- а как сделать, чтобы строка не добавилась, но приложение об этом не узнало? \r
Т.е. делать raise exception не годится... Или это совсем уж против правил и посему нужно очень сильно извратиться???
...
Рейтинг: 0 / 0
Как в триггере [b]втихую[/b] отменить вставку строки (v.2)
    #32163512
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piece of cake:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
SQL> CREATE TABLE CAN_NOT_INSERT(
   2                               X NUMBER
   3                              )
   4   /

Table created.

SQL> CREATE OR REPLACE
   2     PACKAGE GLOBAL
   3       IS
   4         TYPE ROWID_TABLE_TYPE IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
   5         ROWID_TBL ROWID_TABLE_TYPE;
   6   END GLOBAL;
   7   /

Package created.

SQL> CREATE OR REPLACE
   2     TRIGGER CAN_NOT_INSERT_BIS
   3       BEFORE INSERT
   4       ON CAN_NOT_INSERT
   5       BEGIN
   6           GLOBAL.ROWID_TBL.DELETE;
   7   END CAN_NOT_INSERT_BIS;
   8   /

Trigger created.

SQL> CREATE OR REPLACE
   2     TRIGGER CAN_NOT_INSERT_AIR
   3       AFTER INSERT
   4       ON CAN_NOT_INSERT
   5       FOR EACH ROW
   6       BEGIN
   7           GLOBAL.ROWID_TBL(NVL(GLOBAL.ROWID_TBL.LAST, 0 ) +  1 ) := :NEW.ROWID;
   8   END CAN_NOT_INSERT_AIR;
   9   /

Trigger created.

SQL> CREATE OR REPLACE
   2     TRIGGER CAN_NOT_INSERT_AIS
   3       AFTER INSERT
   4       ON CAN_NOT_INSERT
   5       BEGIN
   6           FORALL I IN  1 ..GLOBAL.ROWID_TBL.LAST
   7             DELETE CAN_NOT_INSERT
   8               WHERE ROWID = GLOBAL.ROWID_TBL(I);
   9   END CAN_NOT_INSERT_AIS;
  10   /

Trigger created.


And a test:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SQL> INSERT
   2     INTO CAN_NOT_INSERT
   3     VALUES(
   4             1 
   5           )
   6   /

 1  row created.

SQL> SELECT  *
   2     FROM  CAN_NOT_INSERT
   3   /

no rows selected

SQL> INSERT
   2     INTO CAN_NOT_INSERT
   3     SELECT  ROWNUM
   4       FROM USER_OBJECTS
   5   /

 83  rows created.

SQL> SELECT  *
   2     FROM  CAN_NOT_INSERT
   3   /

no rows selected


SY
...
Рейтинг: 0 / 0
Как в триггере [b]втихую[/b] отменить вставку строки (v.2)
    #32163527
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да....
О смеси after insert на statement и each row я как-то не подумал. Меня всё на job тянуло. А тут так изящно...

Thanks a lot.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в триггере [b]втихую[/b] отменить вставку строки (v.2)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]