Триггер для вставки данных на основе значения - PullRequest
0 голосов
/ 03 марта 2020

У нас есть 3 таблицы:

Punch-Table:

ID  user_code (columns )
2   10

Employees_table:

Id  user_code(columns )
5   10

Я хочу триггер, который после вставки новой записи в punches_table будет искать тот же код пользователя в таблице сотрудников, а затем вставить 2 значения идентификатора в:

Punches-employees-relation_table:

ID  employees_id     punches_id    
1   2                 5

Обновить

Спасибо за ответ, я получаю ошибку 1064, я думаю, у меня есть MariaDB и код не подходит для MariaDB.

Вот что я пытаюсь сделать: во-первых, я хотел бы сказать, что в первый раз я не указывал точные имена таблиц и полей.

Итак, чтобы привести в порядок: первое имя таблицы a123_employees_punches

Fields:
id (char(36))
user_code (int(255))

2-я таблица abc12_employees_cstm

Fields:
id_c (char(36))
usercode_c (varchar(255))

3-я таблица abc12_employees_a123_employees_punches_1_10_24_1

fields:
abc12_employees_a123_employees_punches_1abc12_employees_ida (varchar(36))
abc12_empl4863punches_idb (varchar(36))

Среда:

Server: Localhost via UNIX socket
Server type: MariaDB
Server version: 5.5.64-MariaDB - MariaDB Server
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8)

Цель состоит в том, чтобы иметь триггер, который после добавления новой записи в таблицу a123_employees_punches для получения соответствующего id_ c из таблицы abc12_employees_cstm на основе нового введенного кода пользователя и соответствующего ему usercode_ c.

, а затем будет вставлено в 2 поля в таблице abc12_employees_a123_employees_punches_1_ c (abc12_employees_a123_employees_punches_1abc12_employes (1bc12_employe) (vb6) 1032 *

Я пробовал это до сих пор:

CREATE TRIGGER relate_punch_to_employee AFTER INSERT on a123_employees_punches
FOR EACH ROW
BEGIN
    SELECT id_c INTO @id FROM a123_employees_punches_cstm WHERE usercode_c = NEW. user_code ;

    INSERT into abc12_employees_a123_employees_punches_1_c (abc12_employees_a123_employees_punches_1abc12_employees_ida, abc12_empl4863punches_idb) VALUES (@id, NEW.id);
END$$

, но это дает мне следующую ошибку:

1064 - у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '' в строке 4

1 Ответ

1 голос
/ 03 марта 2020

Ваши таблицы и поля выглядят неправильно, и вы не предоставили таблицу создания, поэтому вы должны проверить таблицы и операторы ниже, если они работают

DELIMITER $$
CREATE TRIGGER after_punches_table_insert
AFTER INSERT
ON punches_table
FOR EACH ROW
BEGIN
    SELECT Id INTO @id 
    FROM Employees_table 
    WhERE user_code = NEW. user_code ;

    INSERT INTO Punches_employees_relation_table (employees_id, punches_id)
        VALUES(NEW.ID,@id);

END$$

DELIMITER ;
select version();
| version()                               |
| :-------------------------------------- |
| 10.3.16-MariaDB-1:10.3.16+maria~stretch |
CREATE TABLE Punches_employees_relation_table (
  `employees_id` INTEGER,
  `punches_id` INTEGER
);
CREATE TABLE Employees_table (
  `Id` INTEGER,
  `user_code` INTEGER
);
INsERT INTO Employees_table (
  `Id` ,
  `user_code` 
) VALUES (1,100);
SELECT * FROM Employees_table;
Id | user_code
-: | --------:
 1 |       100
CREATE TABLE punches_table (
  `ID` INTEGER,
  `user_code` INTEGER
);
CREATE TRIGGER after_punches_table_insert
AFTER INSERT
ON punches_table
FOR EACH ROW
BEGIN
SET @id2 = NEW.user_code;
    SELECT Id INTO @id 
    FROM Employees_table 
    WhERE user_code = NEW.user_code ;

    INSERT INTO Punches_employees_relation_table (employees_id, punches_id)
        VALUES(@id,NEW.ID);

END;
InsERT punches_table (ID,user_code) VALUES (3,100);
SELECT * FROM Punches_employees_relation_table;
employees_id | punches_id
-----------: | ---------:
           1 |          3

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...