2015-11-11 2 views
0

У меня есть база данных SQLite3, которую я бы хотел создать. Я хочу, чтобы поле INTEGER (с именем «Длина») имело значение DEFAULT, равное длине строки в другом поле (с именем «Pattern»).Настройка полей SQLite3 по умолчанию Динамически

CREATE TABLE knowledge (
    Entry INTEGER PRIMARY KEY AUTOINCREMENT, 
    Priority TINYINT UNSIGNED CHECK (0 <= Priority < 15), 
    Pattern TEXT NOT NULL, 
    Length INTEGER UNSIGNED DEFAULT 'LENGTH(Pattern);' 
); 

Однако текущая настройка таблицы не «динамически» устанавливает значение «Длина» по желанию.

Как правильно установить значение DEFAULT для «Длина» в качестве длины строки поля «Шаблон»?

ответ

1

Значение по умолчанию вы хотите назначить динамична, который SQLite не поддерживает. Одним из решений является CL. сказал. Я бы определил значение по умолчанию как 0 и использовал не один, а два триггера (один для вставки, а другой для обновления).

CREATE TRIGGER default_length_on_insert AFTER INSERT ON knowledge WHEN NEW.Length IS 0 
BEGIN 
UPDATE knowledge SET Length=length(NEW.Pattern) WHERE ROWID = NEW.ROWID; 
END; 

и

CREATE TRIGGER default_length_on_update AFTER UPDATE ON knowledge 
BEGIN 
UPDATE knowledge SET Length=length(NEW.Pattern) WHERE ROWID = NEW.ROWID; 
END; 
+0

Спасибо! Мне нравится идея иметь два TRIGGER. –

1

Значение по умолчанию должно быть константой.

Вы coud использовать trigger вместо:

CREATE TRIGGER knowledge_length_default 
AFTER INSERT ON knowledge 
FOR EACH ROW 
WHEN NEW.Length IS NULL 
BEGIN 
    UPDATE knowledge 
    SET Length = length(NEW.Pattern) 
    WHERE Entry = NEW.Entry; 
END; 
+0

Спасибо за помощь. –

Смежные вопросы