我正在尝试创建一个触发器,用于捕获Viewings表中的插入,其中外键(viewings.location)与Places表(places.location)中的现有主键不对应。从我所知道的,逻辑按预期工作。但是我的问题来自尝试将尝试的值连接到raise函数中的错误消息。这是不允许的吗?
create trigger catchForeignKeyError BEFORE INSERT ON VIEWINGS
BEGIN
SELECT CASE
WHEN NEW.location NOT IN (SELECT PLACES.location FROM PLACES) THEN
RAISE(ABORT, 'Error: Insert into the VIEWINGS table references location '''||NEW.location||''' that is not found in the PLACES table.')
END;
END;
答案 0 :(得分:1)
在SQLite语法中,RAISE()表达式的第二个参数不是字符串而是名称:
RAISE(ABORT, some_error)
标识符可以用双引号引用,并且由于历史原因,SQLite accepts a string (with single quotes) where an identifier is expected,但它必须是单个字符串,而不是由其他值组成的字符串表达式:
RAISE(ABORT, "some error")
除了为此创建用户定义的函数之外,没有机制可以将动态值添加到错误消息中。