Stack Overflow на русском Asked on December 28, 2021
У меня есть таблица PanoramaObj:
Можно автоматически делать поле ToggleLine = NULL, если IdGeometryType != 0?
если равен IdGeometryType == 0; ставить дефолтное значение false.
Тип ToggleLine – Bool, который может быть NULL
В дефолтные значение не добавляются SQL запросы:
В тегах к вопросу отмечена СУБД sqlite. По этому я могу предложить решение этой задачи в рамках возможности именно этой СУБД. Но с учетом, что эта СУБД не является строго типизированной СУБД, то значения false и NULL как таковые для неё ничего не значат. По этому что бы выполнить ваше условие вопроса они взяты в кавычки, что сама sqlite интерпретирует как строковые константы. И так, сначала создаем таблицу и нужный триггер:
CREATE
TABLE PanoramaObj (
idGeometryType INTEGER,
ToggleLine BOOLEAN DEFAULT "false"
);
CREATE TRIGGER ToggleLine_Change
AFTER INSERT ON PanoramaObj FOR EACH ROW
BEGIN
UPDATE PanoramaObj SET ToggleLine = "NULL" WHERE idGeometryType != 0;
END;
Затем наполняем таблицу тестовыми кортежами:
INSERT INTO PanoramaObj (idGeometryType) VALUES (1);
INSERT INTO PanoramaObj (idGeometryType) VALUES (0);
INSERT INTO PanoramaObj (idGeometryType) VALUES (5);
INSERT INTO PanoramaObj (idGeometryType, ToggleLine) VALUES (0, "true");
В результате получаем таки записи:
SELECT * FROM PanoramaObj;
idGeometryType|ToggleLine
1|NULL
0|false
5|NULL
0|true
При этом этот триггер, как видно из выборки не мешает задавать и true в записях, если не выполняется условие !=0
P.S: вашу огромную таблицу пришлось для примера сократить :)
P.P.S: И если делать выборку уже из существующей базы с неправильно расставленным полем TogleLine, то можно это делать через представление примерно вот так:
CREATE VIEW PanoramaObj_view AS
SELECT
idGeometryType,
CASE WHEN idGeometryType != 0 THEN "NULL" ELSE "true" END
AS ToggleLIne
FROM PanoramaObj;
Answered by Сабир Исламов on December 28, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP