Передача ссылки на строку в качестве входного параметра функции MariaDB - PullRequest
0 голосов
/ 07 сентября 2018

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

CREATE TRIGGER t BEFORE INSERT ON a FOR EACH ROW
BEGIN
 CALL func(NEW);
END 

Как я могу это сделать?Спасибо

1 Ответ

0 голосов
/ 10 сентября 2018

Может быть, вы можете что-то сделать с новым типом данных ROW :

MariaDB [_]> SELECT VERSION();
+-------------------------+
| VERSION()               |
+-------------------------+
| 10.3.9-MariaDB-1:10.3.9 |
+-------------------------+
1 row in set (0.000 sec)

MariaDB [_]> DROP FUNCTION IF EXISTS `func`;
Query OK, 0 rows affected (0.001 sec)

MariaDB [_]> DROP TABLE IF EXISTS `a`;
Query OK, 0 rows affected (0.002 sec)

MariaDB [_]> CREATE TABLE IF NOT EXISTS `a` (
    ->   `col0` INT NOT NULL,
    ->   `col1` INT NOT NULL
    -> );
Query OK, 0 rows affected (0.006 sec)

MariaDB [_]> DELIMITER //

MariaDB [_]> CREATE TRIGGER `t` BEFORE INSERT ON `a`
    -> FOR EACH ROW
    -> BEGIN
    ->   DECLARE `result` BOOL DEFAULT FALSE;
    ->   DECLARE `NEW_ROW` ROW (`_col0` INT);
    -> 
    ->   -- SET `result` := `func`(NEW);
    ->   SET `NEW_ROW`.`_col0` = NEW.`col0`;
    ->   SET `result` := `func`(`NEW_ROW`);
    -> 
    ->   IF (`result`) THEN
    ->     SET NEW.`col1` := 1000;
    ->   END IF;
    -> END//
Query OK, 0 rows affected (0.001 sec)

MariaDB [_]> DELIMITER ;

MariaDB [_]> CREATE FUNCTION `func` (`NEW_ROW` ROW (`_col0` INT))
    -> RETURNS BOOL
    -> DETERMINISTIC
    ->   RETURN `NEW_ROW`.`_col0` > 10;
Query OK, 0 rows affected (0.000 sec)

MariaDB [_]> INSERT INTO `a`
    ->   (`col0`, `col1`)
    -> VALUES
    ->   (1, 1),
    ->   (11, 1);
Query OK, 2 rows affected (0.007 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [_]> SELECT `col0`, `col1`
    -> FROM `a`;
+------+------+
| col0 | col1 |
+------+------+
|    1 |    1 |
|   11 | 1000 |
+------+------+
2 rows in set (0.002 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...