创建存储过程和SQLite?

k75qkfdt  于 2022-11-15  发布在  SQLite
关注(0)|答案(6)|浏览(197)

在使用SQLite时,是否可以以某种方式创建存储过程?

l5tcr1uw

l5tcr1uw1#

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

tyky79it

tyky79it2#

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

但是,您可以使用您自己的宿主语言(PHP、Python、Perl、C#、JavascriptRuby等)来扩展SQLite。然后,您可以将这些定制函数用作任何SQLite选择/更新/插入/删除的一部分。我已经使用DevArt's SQLite实现了密码散列。

hi3rlvi2

hi3rlvi23#

如果您仍然感兴趣,Chris Wolf用存储过程制作了一个SQLite的原型实现。你可以在他的博客文章中找到详细信息:Adding Stored Procedures to SQLite

twh00eeo

twh00eeo4#

然而,可以使用带有AFTER INSERT触发器的专用表来伪造它,该表以您的伪SP命名。专用表行包含您的伪sp的参数,如果它需要返回结果,您可以使用第二个(POSS)。Temp)表(具有与伪sp相关的名称)来包含这些结果。这将需要两个查询:第一个将数据插入到伪SP触发器表中,第二个从伪SP结果表中进行选择,该表可能为空,或者在出现错误时有一个消息字段。

7uzetpgm

7uzetpgm5#

不能,但您可以:

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

因此,您可以使用存储的Proc执行大多数您通常会执行的操作。
有关如何在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文件。

1sbrub3j

1sbrub3j6#

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

相关问题