SQLite允许define custom functions可以从SQL语句中调用。
我正在尝试使用此机制来获取应用程序中触发器活动的通知,例如:
CREATE TRIGGER AfterInsert AFTER INSERT ON T
BEGIN
-- main trigger code involves some extra db modifications
-- ...
-- invoke application callback
SELECT ChangeNotify('T', 'INSERT', NEW.id);
END;
但是,用户定义的函数仅添加到当前数据库连接。可能还有其他客户未定义ChangeNotify
,我不希望他们收到no such function
错误。只有定义了函数才可以调用函数吗?
也欢迎任何替代解决方案。
答案 0 :(得分:2)
SQLite被设计为嵌入式数据库,因此假设您的应用程序控制对数据库执行的操作。
SQLite没有SQL函数来检查用户定义的函数。
如果您想要检测仅由您自己的程序所做的更改,请使用sqlite3_update_hook。
答案 1 :(得分:1)
在调用用户定义的函数之前,可以通过从pragma_function_list中进行选择来检查该函数是否存在;
select exists(select 1 from pragma_function_list where name='ChangeNotify');
1