如果只存在SQLite中的用户定义函数,我如何调用它?

时间:2013-03-29 10:07:36

标签: sqlite user-defined-functions

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错误。只有定义了函数才可以调用函数吗?

也欢迎任何替代解决方案。

2 个答案:

答案 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