备注 | 修改日期 | 修改人 |
内容更新 | 2023-12-14 09:00:08[当前版本] | 周杨 |
内容更新 | 2023-12-14 08:54:07 | 周杨 |
创建版本 | 2023-12-13 15:02:31 | 周杨 |
解决:通过触发器实现存储过程功能
(1)创建1个触发触发器的表
create table sp_table ( sp_value INT );
(2)创建触发器
CREATE TRIGGER tr_sp AFTER update ON sp_table BEGIN -- 执行相关语句,如: -- INSERT INTO TableName (name, age) VALUES (name, age); -- DELETE FROM TableName WHERE AGE > 100 END;
(3)执行触发器
update sp_table set sp_value = 3
注意:触发器前后表分别对应old和new
通过定义两个或三个使用WHEN条件的触发器来实现相同的效果,请参阅http://sqlite.org/lang_createtrigger.html
CREATE TRIGGER tr_sp_1 AFTER update ON sp_table when sp_value = 1 BEGIN -- 执行相关语句,如: -- INSERT INTO TableName (name, age) VALUES (name, age); -- DELETE FROM TableName WHERE AGE > 100 END;
CREATE TRIGGER tr_sp_2 AFTER update ON sp_table when sp_value = 2 BEGIN -- 执行相关语句,如: -- INSERT INTO TableName (name, age) VALUES (name, age); -- DELETE FROM TableName WHERE AGE <= 100 END;注:查看触发器信息
SELECT * FROM sqlite_master WHERE type = 'trigger';
SQLite并不像其他一些关系型数据库那样有一个直接的方式来声明变量。比如 SQL Server 中的 DECLARE @Name VARCHAR(10)。然而,我们可以通过使用WITH或者CREATE TABLE的方式来模拟一个变量。
WITH my_variable AS ( SELECT 10 AS value ) SELECT * FROM my_variable;
CREATE TABLE my_variable(value INTEGER); INSERT INTO my_variable VALUES(10); SELECT * FROM my_variable;
WITH my_variable AS ( SELECT 10 AS value ) SELECT value * 2 FROM my_variable;
CREATE TABLE my_table(id INTEGER, name TEXT); WITH my_variable AS ( SELECT 10 AS value ) INSERT INTO my_table(id, name) VALUES(value, 'John');
CREATE TABLE my_table(id INTEGER, name TEXT); INSERT INTO my_table(id, name) VALUES(1, 'Alice'); WITH my_variable AS ( SELECT 10 AS new_id ) UPDATE my_table SET id = new_id WHERE name = 'Alice';
CREATE TABLE my_table(id INTEGER, name TEXT); INSERT INTO my_table(id, name) VALUES(1, 'Alice'); WITH my_variable AS ( SELECT 'Alice' AS target_name ) DELETE FROM my_table WHERE name = target_name;转自: https://deepinout.com/sqlite/sqlite-questions/92_sqlite_declare_variable_in_sqlite_and_use_it.html