尝试使用||在RAISE()函数中连接导致语法错误

时间:2017-12-01 17:50:15

标签: database sqlite

relevant documentation

我正在尝试创建一个触发器,用于捕获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;

1 个答案:

答案 0 :(得分:1)

在SQLite语法中,RAISE()表达式的第二个参数不是字符串而是名称:

RAISE(ABORT, some_error)

标识符可以用双引号引用,并且由于历史原因,SQLite accepts a string (with single quotes) where an identifier is expected,但它必须是单个字符串,而不是由其他值组成的字符串表达式:

RAISE(ABORT, "some error")

除了为此创建用户定义的函数之外,没有机制可以将动态值添加到错误消息中。