在SQLite中创建存储过程

jckbn6z7  于 2023-02-23  发布在  SQLite
关注(0)|答案(6)|浏览(516)

在使用SQLite时,是否可以创建一个存储过程?

wydwbb8l

wydwbb8l1#

SQLite不得不牺牲一些人认为有用的其他特性,例如高并发性、细粒度访问控制、丰富的内置函数集、存储过程、深奥的SQL语言特性、XML和/或Java扩展、TB或PB可伸缩性,等等
来源:Appropriate Uses For SQLite

chy5wohz

chy5wohz2#

  • 回答 *:
  • 原因如下 *...我认为在数据库中存储procs的一个关键原因是,您在与SQL引擎相同的进程中执行SP代码。这对于设计为网络连接服务的数据库引擎来说是有意义的,但SQLite的必要性要小得多,因为它在应用程序进程中作为DLL运行,而不是在单独的SQL引擎进程中运行。因此,更有意义的做法是实现所有的业务逻辑,包括用宿主语言编写的SP代码。

但是你可以用你自己的宿主语言user defined functions来扩展SQLite(PHP,Python,Perl,C#,JavascriptRuby等)。然后你可以使用这些自定义函数作为任何SQLite选择/更新/插入/删除的一部分。

i86rm4rw

i86rm4rw3#

Chris Wolf用存储过程做了一个SQLite的原型实现,你可以在他的博客上找到详细信息:Adding Stored Procedures to SQLite

zmeyuzjn

zmeyuzjn4#

然而,**可以使用一个专用表(以fake-sp命名)和AFTER INSERT触发器来伪造它。专用表行包含fake-sp的参数,如果它需要返回结果,您可以使用第二个(poss. temp)表(名称与fake-sp相关)来包含这些结果。这需要两个查询:第一步是将数据插入到fake-sp-trigger-table中,第二步是从fake-sp-results-table中进行SELECT,该表可以为空,或者在出现错误时具有消息字段。

fwzugrvs

fwzugrvs5#

否,但您可以:

  • 编写长的多语句脚本
  • 创建名为Vars的单行临时表来保存变量
  • 在递归CTE上创建View,以便在纯SQL查询中编写任意函数。

所以你可以做大多数你通常用存储过程做的事情。
有关如何在SQL View中编写函数的信息,请参见https://www.cafe-encounter.net/p3300/pretending-that-sqlite-has-stored-procedures-and-functions
或者,您可以:

  • 编译简短的单页C程序来编写任意函数

这比你想象的更容易,工作量更少!
https://www.cafe-encounter.net/p3244/installing-and-using-sqlite-extensions-on-macos-and-maybe-windows-linux-too中提供了一个分步指南,这确实增加了一些部署工作:您必须将附加的dll/so/dylib文件与应用程序一起部署。

q3aa0525

q3aa05256#

我自己也遇到过这个问题。我认为存储过程在PHP PDO中是受支持的,但是那个模块正在处理它,并构建普通的SQL查询发送到SQLite。所以,在PHP中,可以在代码中编写存储过程,但使用它们不会提高性能。
如果我说错了请纠正我。

相关问题