powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORACLE PL/SQL,AFTER UPDATE TRIGGER
3 сообщений из 3, страница 1 из 1
ORACLE PL/SQL,AFTER UPDATE TRIGGER
    #39733881
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно написать trigger на after update таблицы u_mail, могут обновляться все поля.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table U_MAIL_TEST (id char(50),
dep_id char(50),
barcode char(50),
mailtype char(50),
rcpn_phone char(50),  --пример номера +77027490502(с плюсом)
rcpn_phone_spl varchar(50),
FR_CNT_ID_FIRST char(50),
TO_CNT_ID_FIRST char(50),
DIRECTCTG char(50)
)



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE Z_NOTICE_TEST
( ID char(50),
  barcode char(50),
  DEP_ID char(50),
  DEVICE_PHONE char(50), --пример номера 77027490502(без плюса)
  DTYPE char(50),
  STATUS char(50),
  add_date date,
  send_date date,
  f22count char(50),
  barcode_status char(50),
  region char(50),
  user_id char(50)
);



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE Z_NOTICE_NO_PHONES_TEST
( ID char(50),
  barcode char(50),
  DEP_ID char(50),
  DEVICE_PHONE char(50), --пример номера 77027490502(без плюса)
  DTYPE char(50),
  STATUS char(50),
  add_date date,
  send_date date,
  f22count char(50),
  barcode_status varchar(30),
  region char(50),
  user_id char(50)
);



Код: 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.
create or replace trigger u_mail_test_aft_upd
when (barcode like 'EN%EE') /*триггер должен вызываться когда делается update на поля таблицы 'U_MAIL',где поле  'BARCODE' равен barcode like 'EN%EE'*/

declare
v_rcpn_phone:=REGEXP_REPLACE(nvl(:NEW.rcpn_phone,:NEW.rcpn_phone_spl),'[+]');
bPhoneMask := substr(v_rcpn_phone,2,3) in ('700','701','702','703','704','705','706','707','708','709','747','750','751','760','761','762','763','764','770','771','775','776','777','778');/*все это обязательно*/


/*начиная отсюда вообще не правильно просто свою логику пишу*/
if update u_mail_test set mailtype = 7(если обновили именно на 7),sndr_phone =   (update должен произойти если bPhonemask true,не знаю правильно ли расписал)
INSERT INTO Z_NOTICE_test (ID, BARCODE, DEP_ID, DEVICE, DTYPE, STATUS, ADD_DATE, SEND_DATE, F22COUNT, BARCODE_STATUS, REGION, USER_ID)
     VALUES (S_Z_NOTICE_test.Nextval, v_barcode, :NEW.DEP_ID, '7'||substr(v_rcpn_phone,2,10), 3, '0', sysdate, NULL, 1, 'IN_RK', 0, NULL); 
elsif update u_mail_test set mailtype = 7(если обновили именно  на 7),sndr_phone = ' '(если его не обновляют)
INSERT INTO Z_NOTICE_NO_PHONES (BARCODE, DEP_ID, DEVICE, DTYPE, ADD_DATE, F22COUNT, BARCODE_STATUS)
     VALUES (v_barcode, :NEW.DEP_ID, v_rcpn_phone, 3, sysdate, 1, 'IN_RK');
ELSE
     INSERT INTO Z_NOTICE_NO_PHONES_test (BARCODE, DEP_ID, DEVICE, DTYPE, ADD_DATE, F22COUNT, BARCODE_STATUS)
     VALUES (v_barcode, :NEW.DEP_ID, v_rcpn_phone, 3, sysdate, 1, 'IN_RK');
   END IF;
   END IF;
EXCEPTION
WHEN others THEN NULL;

end u_mail_test_aft_upd;



теперь своими словами опишу ситуацию нужно создать триггер after update
когда update u_mail set mailtype = 7,rcpn_phone = '+77027490502' where barcode like 'EN%EE',
then INSERT INTO Z_NOTICE_test (ID, BARCODE, DEP_ID, DEVICE, DTYPE, STATUS, ADD_DATE, SEND_DATE, F22COUNT, BARCODE_STATUS, REGION, USER_ID)
VALUES (S_Z_NOTICE_test.Nextval, v_barcode, :NEW.DEP_ID, '7'||substr(v_rcpn_phone,2,10), 3, '0', sysdate, NULL, 1, 'IN_RK', 0, NULL);
когда update u_mail set mailtype = 7,rcpn_phone is null(если его не заполняли) where barcode like 'EN%EE'
THEN INSERT INTO Z_NOTICE_NO_PHONES_test (BARCODE, DEP_ID, DEVICE, DTYPE, ADD_DATE, F22COUNT, BARCODE_STATUS)
VALUES (v_barcode, :NEW.DEP_ID, v_rcpn_phone, 3, sysdate, 1, 'IN_RK');
...
Рейтинг: 0 / 0
ORACLE PL/SQL,AFTER UPDATE TRIGGER
    #39733892
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanzhar333,

зачем создавать дубликаты ?
...
Рейтинг: 0 / 0
ORACLE PL/SQL,AFTER UPDATE TRIGGER
    #39733894
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanzhar333,

Медитируй на referencing_clause
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORACLE PL/SQL,AFTER UPDATE TRIGGER
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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