SQLITE:如果select返回特定值

时间:2016-01-03 19:21:46

标签: sql sqlite sqltransaction

有没有办法为sqlite编写SQL输入文件,以某种方式“抛出”错误,例如。如果不满足条件,则使用回滚退出事务?

我有一个应该做某事的脚本,但只有在一个表中有某一行时才会这样做。如果它不存在,则执行脚本可能会导致致命的结果并破坏数据库。

该脚本现在只是按需启动,但我更愿意添加一个故障保护措施,以防止在执行某些问题时执行该脚本。

基本上我需要的是像

/* IF */ SELECT value FROM meta WHERE key = 'version' /* != hardcoded_version_string THROW SOME EXCEPTION */

有没有办法实现这一目标?在Postgre / Oracle中,这可以使用PLSQL完成,但我不确定sqlite是否支持任何这样的东西?

2 个答案:

答案 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不是过程语言,这个解决方案有点难看。