使用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
答案 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
放入错误消息中。