我的要求是:在将新条目添加到表时运行shell脚本.
有没有办法在插入新行时添加触发器来运行shell脚本?
嗯,情况是:
我正在使用不同程序的数据库.假设程序X创建并填充xyz.db,我只需要在程序X将新行插入表中时执行一个小脚本.
目前我的shell脚本在循环中无限运行并检查是否有任何新行并对其进行处理,因为插入不是很频繁,连续运行脚本不是一个好的选择.
我的问题类似于我们可以从oracle10g程序执行unix命令,但我需要在sqlite3中执行相同的操作
首先,我完全同意这些评论,这听起来像是一个糟糕的架构。如果 shell 脚本操作不独立于与数据库交互的程序,则应通过调用某种系统命令将该调用嵌入到您的代码中、程序使用的驱动程序中或作为主代码的一部分。
在 Java 中,可以通过ruby 和python中的ProcessBuilder类、方法来完成。system(<command>)os.system(<command>)
在oracle中,可以用java编写触发器,您可以使用它来进行系统调用,但是sqlite中不存在此功能。
如果完全有必要,我建议在 sqlite 数据库驱动程序周围编写一个包装器,并在其中进行系统调用。
也许您可以扩展您实际需要做的事情,我们可以提供替代方法
更新:
您可以使用 c/c++ sqlite 接口在 c/c++ 中创建回调函数(请参阅http://www.sqlite.org/capi3ref.html中的数据更改通知回调),您可以在触发器中调用该函数
CREATE TRIGGER <trigger name>
INSERT ON <table_name>
BEGIN
SELECT callback_function()
END;
Run Code Online (Sandbox Code Playgroud)
然后你可以使用这个callback_function来调用你的shell脚本,听起来相对复杂,但很有趣。