SQLite3:如何在触发器中连接SELECT RAISE()的消息?

时间:2014-11-30 14:52:09

标签: sqlite triggers

使用SQLite3触发器中的SELECT RAISE()并不总是提供足够的上下文来调试格式错误的SQL。我想提供更详细的错误消息。

最明显的尝试不起作用:

SELECT RAISE(ROLLBACK, 'test' || 'ing')

安装触发器时,SQLite3拒绝并显示错误消息:near "||": syntax error

old sqlite-users mailing list message from 2007建议:

SELECT RAISE(ROLLBACK, ERROR_TEXT) FROM (SELECT 'test' || 'ing' ERROR_TEXT);

......但它对我不起作用。 SQLite3不拒绝,但触发错误消息为Error: near line 95: ERROR_TEXT

有什么想法吗?

仅供参考:我正在使用最新版本的SQLite3开发Debian Linux(sid - 流行边缘):3.8.7.1

2 个答案:

答案 0 :(得分:2)

RAISE函数不接受表达式;第二个参数必须是常量字符串(或标识符)。

无法获得动态错误消息。

答案 1 :(得分:0)

答案仍然是没有 :(,但我希望此提示可以帮助某人。

我在Android上使用SQLite 3.8.6。

您无法连接结果,如:

select RAISE(ABORT, 'Cannot change Item(' || old._id || ').parent nullity: '
    || ifNULL(old.parent, 'NULL')
    || ' -> '
    || ifNULL(new.parent, 'NULL')
where (old.parent is null) <> (new.parent is null);

但您可以将条件分解为更具体(在RAISE中有多个TRIGGER

select RAISE(ABORT, 'Cannot change Item.parent nullity: NULL -> NOT NULL!')
where old.parent is null and new.parent is not null;

select RAISE(ABORT, 'Cannot change Item.parent nullity: NOT NULL -> NULL!')
where old.parent is not null and new.parent is null;

然而,这并不能帮助解决问题,例如,想要将Item._id放入错误消息中。