在使用SQLite时,是否可以创建一个存储过程?
wydwbb8l1#
SQLite不得不牺牲一些人认为有用的其他特性,例如高并发性、细粒度访问控制、丰富的内置函数集、存储过程、深奥的SQL语言特性、XML和/或Java扩展、TB或PB可伸缩性,等等来源:Appropriate Uses For SQLite
chy5wohz2#
但是你可以用你自己的宿主语言user defined functions来扩展SQLite(PHP,Python,Perl,C#,Javascript,Ruby等)。然后你可以使用这些自定义函数作为任何SQLite选择/更新/插入/删除的一部分。
i86rm4rw3#
Chris Wolf用存储过程做了一个SQLite的原型实现,你可以在他的博客上找到详细信息:Adding Stored Procedures to SQLite
zmeyuzjn4#
然而,**可以使用一个专用表(以fake-sp命名)和AFTER INSERT触发器来伪造它。专用表行包含fake-sp的参数,如果它需要返回结果,您可以使用第二个(poss. temp)表(名称与fake-sp相关)来包含这些结果。这需要两个查询:第一步是将数据插入到fake-sp-trigger-table中,第二步是从fake-sp-results-table中进行SELECT,该表可以为空,或者在出现错误时具有消息字段。
fwzugrvs5#
否,但您可以:
Vars
CTE
View
所以你可以做大多数你通常用存储过程做的事情。有关如何在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
q3aa05256#
我自己也遇到过这个问题。我认为存储过程在PHP PDO中是受支持的,但是那个模块正在处理它,并构建普通的SQL查询发送到SQLite。所以,在PHP中,可以在代码中编写存储过程,但使用它们不会提高性能。如果我说错了请纠正我。
6条答案
按热度按时间wydwbb8l1#
SQLite不得不牺牲一些人认为有用的其他特性,例如高并发性、细粒度访问控制、丰富的内置函数集、存储过程、深奥的SQL语言特性、XML和/或Java扩展、TB或PB可伸缩性,等等
来源:Appropriate Uses For SQLite
chy5wohz2#
但是你可以用你自己的宿主语言user defined functions来扩展SQLite(PHP,Python,Perl,C#,Javascript,Ruby等)。然后你可以使用这些自定义函数作为任何SQLite选择/更新/插入/删除的一部分。
i86rm4rw3#
Chris Wolf用存储过程做了一个SQLite的原型实现,你可以在他的博客上找到详细信息:Adding Stored Procedures to SQLite
zmeyuzjn4#
然而,**可以使用一个专用表(以fake-sp命名)和AFTER INSERT触发器来伪造它。专用表行包含fake-sp的参数,如果它需要返回结果,您可以使用第二个(poss. temp)表(名称与fake-sp相关)来包含这些结果。这需要两个查询:第一步是将数据插入到fake-sp-trigger-table中,第二步是从fake-sp-results-table中进行SELECT,该表可以为空,或者在出现错误时具有消息字段。
fwzugrvs5#
否,但您可以:
Vars
的单行临时表来保存变量CTE
上创建View
,以便在纯SQL查询中编写任意函数。所以你可以做大多数你通常用存储过程做的事情。
有关如何在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
文件与应用程序一起部署。q3aa05256#
我自己也遇到过这个问题。我认为存储过程在PHP PDO中是受支持的,但是那个模块正在处理它,并构建普通的SQL查询发送到SQLite。所以,在PHP中,可以在代码中编写存储过程,但使用它们不会提高性能。
如果我说错了请纠正我。