Я пытался преобразовать триггер из oracle в MySQL / MariaDB. Я все еще новичок в MySQL, поэтому я все еще думаю.
Это структура таблицы из таблицы, которую я использую триггером:
CREATE TABLE `attendance` (
`attendanceid` varchar(10) NOT NULL,
`studentname` varchar(50) DEFAULT NULL,
`classname` varchar(20) DEFAULT NULL,
`status` varchar(20) DEFAULT NULL,
`atdate` varchar(20) DEFAULT NULL,
`classid` varchar(20) DEFAULT NULL
)
Я уже создал таблицу последовательности для триггера, как показано ниже:
CREATE TABLE `att_seq` (
`id` int(11) NOT NULL
)
Это код из oracle:
CREATE OR REPLACE TRIGGER "STUDENT"."CLASSID"
BEFORE INSERT ON attendance
FOR EACH ROW
declare
BEGIN
if :new.attendanceid is null then
select 'ATT' || attandance_seq.nextval into :new.attendanceid from dual;
if inserting then
if(:new.classname = '4A') then
:new.classid := 'CLASS401';
end if;
if(:new.classname = '4B') then
:new.classid := 'CLASS402';
end if;
if(:new.classname = '4C') then
:new.classid := 'CLASS403';
end if;
end if;
end if;
END;
/
, и это, безусловно, то, как я его преобразовал (p / s: код 'update class ..' - это новый код, который я добавил из oracle):
DELIMITER $$
CREATE TRIGGER att_auto_id
BEFORE INSERT ON attendance
FOR EACH ROW
BEGIN
INSERT INTO att_seq VALUES (NULL);
SET NEW.attendanceid = CONCAT('ATT', LPAD(LAST_INSERT_ID(), 3, '00'));
IF inserting THEN
IF new.classname = `4A` THEN
SET new.classid = `CLASS401`;
UPDATE class
SET classid = new.classid;
END IF;
IF new.classname = `4B` THEN
SET new.classid = `CLASS402`;
UPDATE class
SET classid = new.classid;
END IF;
IF new.classname = `4C` THEN
SET new.classid = `CLASS403`;
UPDATE class
SET classid = new.classid;
END IF;
END IF;
END $$
когда я запускаю его, я получаю эту ошибку:
1054 - Неизвестный столбец «вставка» в «список полей»
Было бы очень признательно, если бы кто-нибудь мог мне помочь. Спасибо заранее :)