Как создать триггер с помощью Inner Joins - PullRequest
0 голосов
/ 04 июня 2019

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

При создании триггера я получаю ошибку "Неизвестная системная переменная 'var1'"

Это макет базы данных:

https://cdn.discordapp.com/attachments/582912082450710528/583696750322253824/unknown.png

DELIMITER $$
CREATE TRIGGER Loan_Insert AFTER INSERT ON loan
FOR EACH ROW
BEGIN

SET var1 =
(SELECT loan_type.type_of_loan
FROM loan INNER JOIN loan_type ON
loan.loan_type_idloan_type = loan_type.idloan_type
AND
loan.loan_type_idapp_type = loan_type.idapp_type
WHERE loan.loan_type_idloan_type = new.loan_type_idloan_type
AND loan.loan_type_idapp_type = new.loan_type_idapp_type);

SET var2 =
(SELECT loan_type.app_type
FROM loan INNER JOIN loan_type ON
loan.loan_type_idloan_type = loan_type.idloan_type
AND
loan.loan_type_idapp_type = loan_type.idapp_type
WHERE loan.loan_type_idloan_type = new.loan_type_idloan_type
AND loan.loan_type_idapp_type = new.loan_type_idapp_type);


INSERT INTO Aud_Loan(bk_Loan, type_of_loan, type_of_loan_description, application_type,
application_type_description, insert_date)
VALUES(new.idloan, new.loan_type_idloan_type, var1, new.loan_type_idapp_type, var2,CURDATE());
END $$

1 Ответ

0 голосов
/ 04 июня 2019
  • Локальные переменные должны быть DECLARE d. документы
  • При использовании SET правая сторона должна возвращать только одно значение (один результат с одним полем).

В вашем конкретном случае вы, вероятно, можете настроить запросы, используемые в ваших инструкциях SET, следующим образом:

SET var1 = (
   SELECT loan_type.type_of_loan
   FROM loan_type 
   WHERE loan_type.idloan_type = NEW.loan_type_idloan_type
      AND loan_type.idapp_type = NEW.loan_type_idapp_type
);

и, возможно, вы даже сможете сократить его до одного запроса с помощью SELECT INTO :

SELECT loan_type.type_of_loan, loan_type.app_type
INTO var1, var2
FROM loan_type 
WHERE loan_type.idloan_type = NEW.loan_type_idloan_type
   AND loan_type.idapp_type = NEW.loan_type_idapp_type
;
...