答案 0 :(得分:192)
答案 1 :(得分:81)
回答:否
这是为什么 ...我认为在数据库中存储过程的一个关键原因是你在与SQL引擎相同的进程中执行SP代码。这对于设计用作网络连接服务的数据库引擎是有意义的,但SQLite的必要性要小得多,因为它在应用程序进程中作为DLL运行,而不是在单独的SQL引擎进程中运行。因此,实现所有业务逻辑(包括宿主语言中的SP代码)会更有意义。
但是,您可以使用宿主语言(PHP,Python,Perl,C#,user defined functions,Javascript等)使用您自己的Ruby扩展SQLite。然后,您可以将这些自定义函数用作任何SQLite select / update / insert / delete的一部分。我done this in C#使用DevArt's SQLite来实现密码哈希。
答案 2 :(得分:15)
如果您仍然感兴趣,Chris Wolf使用存储过程实现了SQLite的原型实现。您可以在他的博客文章中找到详细信息:Adding Stored Procedures to SQLite
答案 3 :(得分:6)
然而,可以伪造它使用专用的表,以伪造的sp命名,带有AFTER INSERT触发器。专用表行包含伪sp的参数,如果需要返回结果,则可以使用第二个(poss.temp)表(名称与fake-sp相关)来包含这些结果。它需要两个查询:首先将数据插入到伪sp-trigger-table中,第二个从伪sp-results-table中插入SELECT,这可能是空的,或者如果出现问题则有一个消息字段
答案 4 :(得分:1)
不,但你可以:
Vars
保存变量View
上创建 CTE
以在纯 SQL 查询中编写任意函数。这意味着您可以有效地执行大多数通常使用存储过程执行的操作。
有关在 SQL View
中编写函数的最后一点,请参阅 https://www.cafe-encounter.net/p3300/pretending-that-sqlite-has-stored-procedures-and-functions。
编译用于 SQLite 的 C 程序比您想象的要容易。 macos 分步指南位于 https://www.cafe-encounter.net/p3244/installing-and-using-sqlite-extensions-on-macos-and-maybe-windows-linux-too 。这确实增加了一些部署工作:您必须在应用程序中部署额外的 dll
/so
/dylib
文件。