sql - SQLITE:如果select返回特定值,则停止执行

标签 sql sqlite sqltransaction

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

我有一个脚本,它应该做某事,但前提是一个表中有一定的行。如果不存在,脚本的执行可能会导致致命的结果并破坏数据库。

该脚本现在仅按需启动,但是我希望添加故障保护功能,以防万一出现问题时无法执行该脚本。

基本上我需要的是

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


有什么办法可以做到这一点?在Postgre / Oracle中,可以使用PLSQL完成此操作,但是我不确定sqlite是否支持任何此类操作?

最佳答案

Triggers可以使用RAISE函数生成错误:

CREATE VIEW test AS SELECT NULL AS value;
CREATE TRIGGER test_insert
INSTEAD OF INSERT ON test
BEGIN
  SELECT RAISE(FAIL, 'wrong value')
  WHERE NEW.value != 'fixed_value';
END;

INSERT INTO test SELECT 'fixed_value';
INSERT INTO test SELECT 'whatever';
Error: wrong value

关于sql - SQLITE:如果select返回特定值,则停止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34580615/

相关文章:

SQL UPDATE 字符串中的特定字符

mysql - SUBQUERY 和 INNER JOIN - MySQL 和 SQL 之间的区别

javascript - 为什么我的 JSON 文件包含 [object Object]?

sql-server - Insert OUTPUT Insert.id to another table in multiple values insert

sql - 有一种方法可以查明我的行是已读已提交还是已读未提交?

c# - SQLTransaction.Commit() 如何工作?

php - 根据不同表的值创建 PHP 请求

SQL Server 只返回单行或 null

SQL 语法 : select only if more than X results

iphone - 无法在 ios 中创建 sqlite3 数据库