Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Составление триггера на каскадное удаление  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Oracle 9.2.0.1.0
В Oracle не силен. И не нашел где почитать об триггерах в части каскадного удаления, поэтому прошу помощи в написании триггера на удаление записи (каскадное удаление в другой таблице).
Если бы был на MSSQL, то триггер на удаление записи выглядел бы так:
CREATE TRIGGER [dbo].[T_CRISIS_PERIOD_TR_AFTER] ON [dbo].[T_CRISIS_PERIOD]
WITH EXECUTE AS CALLER
FOR DELETE
AS
BEGIN
  SET NOCOUNT ON 
  DECLARE @ID int
  SELECT @ID = ID FROM [b]deleted[/b]
  DELETE FROM [T_CRISIS_DATA] WHERE [ID_PERIOD] = @ID
END
GO
А как на Oracle?
13 апр 09, 15:59    [7057126]     Ответить | Цитировать Сообщить модератору
 Re: Составление триггера на каскадное удаление  [new]
Elic
Member

Откуда:
Сообщений: 29984
Владимир СА
А как на Oracle?
RTFM ON DELETE Clause (FAQ)
13 апр 09, 16:01    [7057134]     Ответить | Цитировать Сообщить модератору
 Re: Составление триггера на каскадное удаление  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Из ссылки видно, что каскадное удаление производится созданием CONSTRAINT с ON DELETE CASCADE.
Но что-то у меня не получается. Прошу помощи в составлении CONSTRAINT так и в понимании идеологии.
И так.
Имеется родительская таблица - справочник
CREATE TABLE T_CRISIS_PERIOD
(
  ID NUMBER,
  DATE_BEG DATE NOT NULL,
  DATE_END DATE NOT NULL,
  S_DESCRIPTION VARCHAR2(1000),
  ORD NUMBER NOT NULL,
  PRIMARY KEY (ID)
)
Имеется дочерняя таблица данных
CREATE TABLE T_CRISIS_DATA
(
  ID_WORKS NUMBER,
  ID_PERIOD NUMBER,
  ID_REG NUMBER,
  ID_POK NUMBER,
  VAL FLOAT,
  PRIMARY KEY (ID_WORKS,ID_PERIOD,ID_REG,ID_POK)
)
Цель: создать CONSTRAINT или триггер на каскадное удаление. Т.е. при удалении записи из таблицы T_CRISIS_PERIOD (справочника), то удаляются все записи из таблицы T_CRISIS_DATA при условии, что T_CRISIS_DATA.ID_PERIOD = T_CRISIS_PERIOD.ID (удаляемая запись из справочника).
Как правильно добавить (создать) CONSTRAINT ?
Создаю CONSTRAINT
ALTER TABLE T_CRISIS_PERIOD
ADD CONSTRAINT PERIOD_DEL
надо связать поле (ID)
REFERENCES T_CRISIS_DATA(ID_PERIOD)
ON DELETE CASCADE
14 апр 09, 09:04    [7058942]     Ответить | Цитировать Сообщить модератору
 Re: Составление триггера на каскадное удаление  [new]
azzy
Member

Откуда:
Сообщений: 149
Владимир СА,

Constraint надо создавать в таблице T_CRISIS_DATA

ALTER TABLE T_CRISIS_DATA ADD CONSTRAINT FK_PERIOD FOREIGN KEY(ID_PERIOD) REFERENCES T_CRISIS_PERIOD(ID) ON DELETE CASCADE;
14 апр 09, 09:23    [7058983]     Ответить | Цитировать Сообщить модератору
 Re: Составление триггера на каскадное удаление  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
azzy
Владимир СА,

Constraint надо создавать в таблице T_CRISIS_DATA

ALTER TABLE T_CRISIS_DATA ADD CONSTRAINT FK_PERIOD FOREIGN KEY(ID_PERIOD) REFERENCES T_CRISIS_PERIOD(ID) ON DELETE CASCADE;
Точно. Спасибо.
14 апр 09, 09:31    [7059008]     Ответить | Цитировать Сообщить модератору
 Re: Составление триггера на каскадное удаление  [new]
Elic
Member

Откуда:
Сообщений: 29984
Владимир СА
Прошу помощи в составлении CONSTRAINT
Там же чуть выше слово Example.
Владимир СА
так и в понимании идеологии.
RTFM Introduction to Data Integrity (FAQ)

Владимир СА
И так.
14 апр 09, 09:33    [7059018]     Ответить | Цитировать Сообщить модератору
 Re: Составление триггера на каскадное удаление  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Elic
Владимир СА
Прошу помощи в составлении CONSTRAINT
Там же чуть выше слово Example.
Владимир СА
так и в понимании идеологии.
RTFM Introduction to Data Integrity (FAQ)
Я видел Example. Но что-то не разобрался. С английским туговато. Да и идеология еще от MSSQL в голове.
Elic
Владимир СА
И так.
Интересно. Но я думал что раздельно.
14 апр 09, 10:08    [7059148]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить