programing

MariaDB 트리거에서 JSON_EXTRACT 사용

lastcode 2023. 8. 5. 10:16
반응형

MariaDB 트리거에서 JSON_EXTRACT 사용

문장의 일부로 JSON_EXTRACT를 사용하는 INSERT 트리거를 MariaDB에 생성하려고 합니다.오류가 발생했습니다.

54행 오류 1305(42000): 기능 새로 고침.JSON_EXTRECT가 존재하지 않습니다.

설명서를 보니 트리거에서 JSON 사용에 제한이 있는지 확인할 수 없습니다.

다음은 문제를 보여주는 예입니다.보다시피 JSON_EXTRECT는 선택 시 잘 작동합니다.

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;

처리 방법은 다음과 같습니다. (부차적인 구문 변경)

UPDATE test2 SET battery_level = JSON_EXTRACT(NEW.readings, '$.level');

언급URL : https://stackoverflow.com/questions/58980095/using-json-extract-in-mariadb-trigger

반응형