2015-06-15 2 views
0

Я пытаюсь создать триггер в MySQL с данными Select Column из Join multiple table. Но Trigger не позволяет мне DECLARE temp variable.Как создать триггер после вставки с выбранными данными из нескольких таблиц с подключением в MYSql

Я хотел бы присоединиться к 4 таблицы на основании вновь вставленной записи в одной таблице и выбрать данные из другой таблицы и вставки обновления г в другой таблице (DashboardStatus)

Я получаю сообщение об ошибке [SQL Error (1064): У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса использовать вблизи 'SET _BedId = (SELECT bd.BedId
ИЗ LifetouchHeartRate LTHR РЕГИСТРИРУЙТЕСЬ устройства' в строке 4 * /]


CREATE TABLE `dashboardstatus` (
    `LTHR` INT(11) NULL DEFAULT NULL, 
    `BedId` INT(11) NULL DEFAULT NULL 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB; 



CREATE TRIGGER triggerDashboard AFTER INSERT ON LifetouchHeartRate for each row 
BEGIN 
DECLARE _BedId INT 
SET _BedId = (SELECT bd.BedId As _BedId  
FROM LifetouchHeartRate lthr 
JOIN DeviceSession ds ON ds.DeviceSessionID = lthr.ByDevSessionId 
JOIN PatientSession ps ON ps.PatientSessionId = ds.ByPatientSessionId 
JOIN PatientDetails pd ON pd.PatientDetailsId = ps.ByPatientId 
JOIN BedDetails bd ON bd.BedDetailsId = pd.ByBedId 
WHERE lthr.LifeTouchHeartRateID = new.LifeTouchHeartRateID Limit 1); 

IF _BedId > 0 
    BEGIN 
      INSERT OR REPLACE INTO DashboardStatus (LTHR, BedId) VALUES (new.LifeTouchHeartRateID, _BedId) 
    END 
END 

ответ

0

Запомнить ;

... 
CREATE TRIGGER triggerDashboard AFTER INSERT ON LifetouchHeartRate for each row 
BEGIN 
-- DECLARE _BedId INT 
DECLARE _BedId INT; 
... 

UPDATE

DELIMITER // 

CREATE TRIGGER triggerDashboard AFTER INSERT ON LifetouchHeartRate 
FOR EACH ROW 
BEGIN 
    -- DECLARE _BedId INT 
    DECLARE _BedId INT; 
    SET _BedId = (SELECT bd.BedId As _BedId 
       FROM LifetouchHeartRate lthr 
        JOIN DeviceSession ds ON ds.DeviceSessionID = lthr.ByDevSessionId 
        JOIN PatientSession ps ON ps.PatientSessionId = ds.ByPatientSessionId 
        JOIN PatientDetails pd ON pd.PatientDetailsId = ps.ByPatientId 
        JOIN BedDetails bd ON bd.BedDetailsId = pd.ByBedId 
       WHERE lthr.LifeTouchHeartRateID = new.LifeTouchHeartRateID Limit 1); 

    /*IF _BedId > 0 
     BEGIN 
       INSERT OR REPLACE INTO DashboardStatus (LTHR, BedId) VALUES (new.LifeTouchHeartRateID, _BedId) 
     END 
    END*/ 

    IF _BedId > 0 THEN 
    -- BEGIN 
     INSERT INTO DashboardStatus (LTHR, BedId) VALUES (new.LifeTouchHeartRateID, _BedId); 
    -- END 
    END IF; 
END// 

DELIMITER ; 

SQL Fiddle demo

+0

Спасибо за ответ. Я уже пробовал; но я получил ошибку ниже Ошибка SQL (1064): У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего MySQL-сервера, для правильного синтаксиса для использования рядом с 'BEGIN DECLARE BedId INT' в строке 2 – skt

+0

Уважаемый wchiquito. Я получаю сообщение об ошибке Syntex, когда я выполнил вышеуказанный запрос Ошибка SQL (1064): У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' по строке 4 – skt

+0

Спасибо за его работу. Я не добавил DELIMITER; наверху и концу – skt

Смежные вопросы