Могу ли я иметь несколько операторов запроса внутри оператора If SQL-триггера? - PullRequest
0 голосов
/ 23 ноября 2018
DECLARE **cusname** varchar;

IF(New.BecomeVolunteer = 'Yes') 
THEN 
SELECT CusName INTO cusname FROM customer WHERE CusID = NEW.CusID;

INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, [enter image description here][1]StaffType)
VALUES
(**cusname**, '07589634598', '1965-05-13', 'Tue,Wed,SatPM','Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer');
END IF

У меня есть таблица сотрудников, и я хочу получить CusName из таблицы customer и установить для нее переменную cusname.Затем я хочу использовать эту переменную в своем операторе «Вставка» в качестве значения для атрибута «StaffName».

Я пока мало работал с триггерами, но я понимаю базовый синтаксис, чтобы простые операторы работали, но этот постояннодает ошибку.Буду признателен, если кто-нибудь поможет мне понять, что здесь не так.

IF(New.BecomeVolunteer = 'Yes') 
THEN 
INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
VALUES
('Jaamees', '07589634598', '1965-05-13', 'Tue,Wed,SatPM','Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer');
END IF

Следующее утверждение работает отлично, но не выше (когда я хочу добавить переменную).

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы можете сделать все это в одном утверждении:

IF (New.BecomeVolunteer = 'Yes') THEN 
    INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
        SELECT c.cusname, '07589634598', '1965-05-13', 'Tue,Wed,SatPM', 'Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer')
        FROM customer c
        WHERE c.CustId = NEW.CusID

И вы можете даже удалить IF:

    INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
        SELECT c.cusname, '07589634598', '1965-05-13', 'Tue,Wed,SatPM', 'Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer')
        FROM customer c
        WHERE c.CustId = NEW.CusID AND
              New.BecomeVolunteer = 'Yes';
0 голосов
/ 23 ноября 2018

IF по умолчанию работает с одним оператором.Если вы хотите выполнить более одного оператора внутри IF, используйте BEGIN...END:

IF (New.BecomeVolunteer = 'Yes') 
BEGIN
    SELECT CusName INTO cusname FROM customer WHERE CusID = NEW.CusID;
    INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
    VALUES
        (cusname, '07589634598', '1965-05-13', 'Tue,Wed,SatPM',
        'Collecting Tickets,Ushering Customers to Seats,Looking after the Artists',
        'Volunteer');
END;
...