时间:2010-07-26 13:23:54

标签: sqlite stored-procedures

5 个答案:

答案 0 :(得分:192)

答案 1 :(得分:81)

回答

这是为什么 ...我认为在数据库中存储过程的一个关键原因是你在与SQL引擎相同的进程中执行SP代码。这对于设计用作网络连接服务的数据库引擎是有意义的,但SQLite的必要性要小得多,因为它在应用程序进程中作为DLL运行,而不是在单独的SQL引擎进程中运行。因此,实现所有业务逻辑(包括宿主语言中的SP代码)会更有意义。

但是,您可以使用宿主语言(PHP,Python,Perl,C#,user defined functionsJavascript等)使用您自己的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 保存变量
  • 编译简短的单页 C 程序来编写任意函数
  • 在递归 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 文件。