在使用SQLite时,是否可以以某种方式创建存储过程?
l5tcr1uw1#
SQLite不得不牺牲一些人认为有用的其他特性,例如高并发性、细粒度访问控制、丰富的内置函数集、存储过程、深奥的SQL语言特性、XML和/或Java扩展、TB或Peta字节可伸缩性,等等来源:Appropriate Uses For SQLite
tyky79it2#
但是,您可以使用您自己的宿主语言(PHP、Python、Perl、C#、Javascript、Ruby等)来扩展SQLite。然后,您可以将这些定制函数用作任何SQLite选择/更新/插入/删除的一部分。我已经使用DevArt's SQLite实现了密码散列。
hi3rlvi23#
如果您仍然感兴趣,Chris Wolf用存储过程制作了一个SQLite的原型实现。你可以在他的博客文章中找到详细信息:Adding Stored Procedures to SQLite
twh00eeo4#
然而,可以使用带有AFTER INSERT触发器的专用表来伪造它,该表以您的伪SP命名。专用表行包含您的伪sp的参数,如果它需要返回结果,您可以使用第二个(POSS)。Temp)表(具有与伪sp相关的名称)来包含这些结果。这将需要两个查询:第一个将数据插入到伪SP触发器表中,第二个从伪SP结果表中进行选择,该表可能为空,或者在出现错误时有一个消息字段。
7uzetpgm5#
不能,但您可以:
Vars
CTE
View
因此,您可以使用存储的Proc执行大多数您通常会执行的操作。有关如何在SQL View中编写函数的信息,请参阅https://www.cafe-encounter.net/p3300/pretending-that-sqlite-has-stored-procedures-and-functions。或者,您可以:
这比你想象的更容易,也更少的工作!在https://www.cafe-encounter.net/p3244/installing-and-using-sqlite-extensions-on-macos-and-maybe-windows-linux-too上有一个逐步指南。这确实增加了一些部署工作:您必须在应用程序中部署额外的dll/so/dylib文件。
dll
so
dylib
1sbrub3j6#
我自己也遇到过这个问题。我认为php PDO支持存储过程,但该模块正在处理它并构建普通的SQL查询以发送到SQLite。因此,在php中,可以在代码中编写存储过程,但使用它们不会带来性能提升。如果我说错了,请纠正我。
6条答案
按热度按时间l5tcr1uw1#
SQLite不得不牺牲一些人认为有用的其他特性,例如高并发性、细粒度访问控制、丰富的内置函数集、存储过程、深奥的SQL语言特性、XML和/或Java扩展、TB或Peta字节可伸缩性,等等
来源:Appropriate Uses For SQLite
tyky79it2#
但是,您可以使用您自己的宿主语言(PHP、Python、Perl、C#、Javascript、Ruby等)来扩展SQLite。然后,您可以将这些定制函数用作任何SQLite选择/更新/插入/删除的一部分。我已经使用DevArt's SQLite实现了密码散列。
hi3rlvi23#
如果您仍然感兴趣,Chris Wolf用存储过程制作了一个SQLite的原型实现。你可以在他的博客文章中找到详细信息:Adding Stored Procedures to SQLite
twh00eeo4#
然而,可以使用带有AFTER INSERT触发器的专用表来伪造它,该表以您的伪SP命名。专用表行包含您的伪sp的参数,如果它需要返回结果,您可以使用第二个(POSS)。Temp)表(具有与伪sp相关的名称)来包含这些结果。这将需要两个查询:第一个将数据插入到伪SP触发器表中,第二个从伪SP结果表中进行选择,该表可能为空,或者在出现错误时有一个消息字段。
7uzetpgm5#
不能,但您可以:
Vars
的临时单行表以保存变量CTE
上创建View
,以便在纯SQL查询中编写任意函数。因此,您可以使用存储的Proc执行大多数您通常会执行的操作。
有关如何在SQL
View
中编写函数的信息,请参阅https://www.cafe-encounter.net/p3300/pretending-that-sqlite-has-stored-procedures-and-functions。或者,您可以:
这比你想象的更容易,也更少的工作!
在https://www.cafe-encounter.net/p3244/installing-and-using-sqlite-extensions-on-macos-and-maybe-windows-linux-too上有一个逐步指南。这确实增加了一些部署工作:您必须在应用程序中部署额外的
dll
/so
/dylib
文件。1sbrub3j6#
我自己也遇到过这个问题。我认为php PDO支持存储过程,但该模块正在处理它并构建普通的SQL查询以发送到SQLite。因此,在php中,可以在代码中编写存储过程,但使用它们不会带来性能提升。
如果我说错了,请纠正我。