Помогите с написанием MySQL триггера - PullRequest
2 голосов
/ 20 июня 2011

Со следующими таблицами:

Party.(PartyId, PartyTypeCode) и Member.(MemberId (FK), Name)

Я хочу заполнить столбец MemberId значением PartyId после создания новой партии.

Я знаю, что приведенный ниже SQL неверен, но поэтому я ищу помощи в его правильном определении.

CREATE TRIGGER tgr_member_create AFTER INSERT on Party
FOR EACH ROW BEGIN
    IF NEW.PartyTypeCode = 'M' THEN
        INSERT Member(MemberId)
        VALUES('Party.PartyId')
    END IF;
END;

Благодаря вкладу Нанн, это то, что работает:

DELIMITER $$

CREATE TRIGGER tgr_member_create AFTER INSERT on Party
FOR EACH ROW BEGIN
    IF NEW.PartyTypeCode = 'M' THEN
        INSERT Member (MemberId,Name)
        VALUES(NEW.PartyId, 'someName');
    END IF;
END;$$

DELIMITER ;

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Ваши значения должны вызывать строку NEW, точно так же, как вы делаете с типом partyty, я полагаю?Я предполагаю,

delimiter $$

CREATE TRIGGER tgr_member_create AFTER INSERT on Party
FOR EACH ROW BEGIN
    IF NEW.PartyTypeCode = 'M' THEN
        INSERT Member (MemberId,Name)
        VALUES(NEW.PartyId, 'someName')
    END IF;
END;$$

Обратите внимание на код разделителя.Поскольку вы используете ; внутри, вы не можете использовать его как обычный токен конца команды.вот почему &&

Для отладки: убедитесь, что запрос работает, когда вы выполняете его вне триггера:

INSERT Member (MemberId,Name)
VALUES(party-id goes here, 'someName')

Там может быть небольшая ошибкаЗаполните вашу партию. Очевидно.

0 голосов
/ 20 июня 2011

Попробуйте это

CREATE TRIGGER tgr_member_create AFTER INSERT on Party
FOR EACH ROW BEGIN
    IF NEW.PartyTypeCode = 'M' THEN
        INSERT Member(MemberId)
        VALUES('New.PartyId')
    END IF;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...