有没有办法为sqlite编写SQL输入文件,以某种方式“抛出”错误,例如。如果不满足条件,则使用回滚退出事务?
我有一个应该做某事的脚本,但只有在一个表中有某一行时才会这样做。如果它不存在,则执行脚本可能会导致致命的结果并破坏数据库。
该脚本现在只是按需启动,但我更愿意添加一个故障保护措施,以防止在执行某些问题时执行该脚本。
基本上我需要的是像
/* IF */ SELECT value FROM meta WHERE key = 'version' /* != hardcoded_version_string THROW SOME EXCEPTION */
有没有办法实现这一目标?在Postgre / Oracle中,这可以使用PLSQL完成,但我不确定sqlite是否支持任何这样的东西?
答案 0 :(得分:1)
Triggers可以使用RAISE函数生成错误:
blog/:id
答案 1 :(得分:1)
有没有办法为sqlite编写一个SQL输入文件 以某种方式“抛出”错误,例如。退出退出事务,如果 条件不符合?
一种解决方法可能是创建虚拟表并明确违反NULL
约束:
CREATE TABLE meta("key" VARCHAR(100));
INSERT INTO meta("key") VALUES ('version');
CREATE TEMPORARY TABLE dummy(col INT NOT NULL);
交易:
BEGIN TRANSACTION;
INSERT INTO dummy(col)
SELECT NULL -- explicit insert of NULL
FROM meta
WHERE "key" = 'version';
-- Error: NOT NULL constraint failed: dummy.col
-- rest code
INSERT INTO meta("key")
VALUES ('val1');
INSERT INTO meta("key")
VALUES ('val2');
-- ...
COMMIT;
的 SqlFiddleDemo
强>
请记住,SQLite不是过程语言,这个解决方案有点难看。