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

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

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

запрещаем менять строку с ид=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
Создать тригер на before update
    #40056690
Мажит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
поругался, выдал ошибку при создании, но заработал. удалил. щас поставлю заново и дам ошибки.Мне бы еще убрать чтоб ошибка не выдавалась что тригер работает на изменении строки. спасибо.
...
Рейтинг: 0 / 0
Создать тригер на before update
    #40056753
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мажит
Stax,
поругался, выдал ошибку при создании, но заработал. удалил. щас поставлю заново и дам ошибки.Мне бы еще убрать чтоб ошибка не выдавалась что тригер работает на изменении строки. спасибо.
инстед оф триггер
...
Рейтинг: 0 / 0
Создать тригер на before update
    #40056789
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мажит
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
Создать тригер на before update
    #40056790
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повбивав би

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

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

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

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

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

ну прости :)

повбивав би

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


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