我正在尝试在MariaDB中创建一个INSERT触发器,该触发器使用JSON_EXTRACT作为语句的一部分。 我收到错误消息:
第54行的错误1305(42000):FUNCTION NEW.JSON_EXTRACT不 存在。
在文档中,我看不到触发器中JSON使用是否有任何限制。
下面是显示问题的示例。如您所见,选择JSON_EXTRACT可以正常工作。
DROP DATABASE IF EXISTS testdb;
CREATE DATABASE testdb;
USE testdb;
DROP TRIGGER IF EXISTS trig_test;
DROP TRIGGER IF EXISTS trig_works;
DROP TABLE IF EXISTS test1;
DROP TABLE IF EXISTS test2;
CREATE TABLE test1 (
tstamp DATETIME DEFAULT CURRENT_TIMESTAMP,
sense VARCHAR(32) NOT NULL,
readings JSON,
test_level INT,
CHECK (JSON_VALID(readings))
);
CREATE TABLE test2 (
sense VARCHAR(32) NOT NULL,
battery_level INT
);
INSERT INTO test1 (sense, test_level, readings) VALUES ('ST00', 80, '{ "level" : 73 }');
SELECT test_level, JSON_EXTRACT(readings, '$.level') FROM test1;
INSERT INTO test2 (sense) VALUES ('ST00');
DELIMITER #
CREATE TRIGGER trig_works AFTER INSERT ON test1
FOR EACH ROW
BEGIN
UPDATE test2
SET battery_level = NEW.test_level
WHERE sense = NEW.sense;
END;
#
DELIMITER ;
INSERT INTO test1 (sense, test_level, readings) VALUES ('ST00', 81, '{ "level" : 74 }');
SELECT test_level, JSON_EXTRACT(readings, '$.level') FROM test1;
SELECT * FROM test2;
DELIMITER #
CREATE TRIGGER trig_test AFTER INSERT ON test1
FOR EACH ROW
BEGIN
UPDATE test2
SET battery_level = NEW.JSON_EXTRACT(readings, '$.level')
WHERE sense = NEW.sense;
END;
#
DELIMITER ;
INSERT INTO test1 (sense, readings) VALUES ('ST00', '{ "level" : 73 }');
SELECT * FROM test2;
DROP TRIGGER IF EXISTS trig_test;
DROP TRIGGER IF EXISTS trig_works;
DROP TABLE IF EXISTS test1;
DROP TABLE IF EXISTS test2;
答案 0 :(得分:0)
也许处理应该是:(一个小的语法调整)
UPDATE test2 SET battery_level = JSON_EXTRACT(NEW.readings, '$.level');