Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создать тригер на before update / 12 сообщений из 12, страница 1 из 1
24.03.2021, 10:29
    #40056569
Мажит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Мне нужно чтоб не вносились изменения в строку из таблицы. работаю в Toad 9/ можно чтоб и в ячейках не вносили изменения.
напишите мне тригер, пожалуйста) вот данные:
схема cross
таблица users
имя user - 12456
пароль passw - dfgdfg
фам fam_user - оператор
должность dolzh - сотрудник
...
Рейтинг: 0 / 0
24.03.2021, 11:02
    #40056585
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Полным нулям дорога в Работа , но только при наличии кредитоспособности.
...
Рейтинг: 0 / 0
24.03.2021, 12:23
    #40056613
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Мажит,

Во все строки таблицы, или с определенным признаком (условием)?

.....
stax
...
Рейтинг: 0 / 0
24.03.2021, 14:33
    #40056659
Мажит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Stax,
в одну строку из таблицы
...
Рейтинг: 0 / 0
24.03.2021, 14:49
    #40056665
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Мажит,

запрещаем менять строку с ид=1 (удалять можно)
Код: plsql
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.
53.
SQL> ed
Wrote file afiedt.buf

  1  CREATE OR REPLACE TRIGGER
  2   t1_disable_one_row
  3  BEFORE UPDATE  ON t1
  4  FOR EACH ROW
  5  begin
  6    if :old.id=1 then
  7     raise_application_error(-20101,'Строку з с ид='||:old.id||' запрещено менять');
  8    end if;
  9* end;
SQL> /

Trigger created.

SQL> select * from t1;

        ID N
---------- ----------
         1 Мажит
         2 Stax

SQL> update t1 set n=n||' Ок!' where id=2;

1 row updated.

SQL> update t1 set n=n||' Ок!' where id=1;
update t1 set n=n||' Ок!' where id=1
       *
ERROR at line 1:
ORA-20101: Строку з с ид=1 запрещено менять
ORA-06512: at "STAX.T1_DISABLE_ONE_ROW", line 3
ORA-04088: error during execution of trigger 'STAX.T1_DISABLE_ONE_ROW'


SQL> update t1 set n=n||' Ок!';
update t1 set n=n||' Ок!'
       *
ERROR at line 1:
ORA-20101: Строку з с ид=1 запрещено менять
ORA-06512: at "STAX.T1_DISABLE_ONE_ROW", line 3
ORA-04088: error during execution of trigger 'STAX.T1_DISABLE_ONE_ROW'


SQL> select * from t1;

        ID N
---------- ----------
         1 Мажит
         2 Stax Ок!

SQL>




.....
stax
...
Рейтинг: 0 / 0
24.03.2021, 16:35
    #40056690
Мажит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Stax,
поругался, выдал ошибку при создании, но заработал. удалил. щас поставлю заново и дам ошибки.Мне бы еще убрать чтоб ошибка не выдавалась что тригер работает на изменении строки. спасибо.
...
Рейтинг: 0 / 0
25.03.2021, 00:22
    #40056753
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Мажит
Stax,
поругался, выдал ошибку при создании, но заработал. удалил. щас поставлю заново и дам ошибки.Мне бы еще убрать чтоб ошибка не выдавалась что тригер работает на изменении строки. спасибо.
инстед оф триггер
...
Рейтинг: 0 / 0
25.03.2021, 09:30
    #40056789
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Мажит
Stax,
.Мне бы еще убрать чтоб ошибка не выдавалась что тригер работает на изменении строки. спасибо.

Если триггер один. или Вы можете гарантировать порядок выполнения триггеров
то
Код: plsql
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.
SQL> select * from t1;

        ID N
---------- ----------
         1 Мажит
         2 Stax

SQL> CREATE OR REPLACE TRIGGER
  2     t1_disable_one_row
  3  BEFORE UPDATE  ON t1
  4  FOR EACH ROW
  5  begin
  6      if :old.id=1 then
  7        if updating('ID') then
  8          :new.id:=:old.id;
  9        end if;
 10        if updating('N') then
 11          :new.n:=:old.n;
 12        end if;
 13        -- .... другие поля
 14      end if;
 15  end;
 16  /

Trigger created.

SQL> update t1 set n=n||' Ой!';

2 rows updated.

SQL> select * from t1;

        ID N
---------- ----------
         1 Мажит
         2 Stax Ой!

SQL>



.....
stax
...
Рейтинг: 0 / 0
25.03.2021, 09:34
    #40056790
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
повбивав би

потом, через год, кто вспомнит, почему строка не меняется
найди тот триггер через отладчик
...
Рейтинг: 0 / 0
25.03.2021, 10:07
    #40056797
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
andreymx,

c инстед оф триггер проще иcкать отладчиком?

......
stax
...
Рейтинг: 0 / 0
25.03.2021, 10:48
    #40056808
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
Stax
andreymx,

c инстед оф триггер проще иcкать отладчиком?

......
stax
ну прости :)
...
Рейтинг: 0 / 0
25.03.2021, 10:52
    #40056810
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать тригер на before update
andreymx

ну прости :)

повбивав би

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создать тригер на before update / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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