当使用SQLite时,是否有可能创建一个存储过程?
当前回答
回答:不
原因如下……我认为将proc存储在数据库中的一个关键原因是,您在与SQL引擎相同的进程中执行SP代码。这对于设计为网络连接服务的数据库引擎来说是有意义的,但考虑到SQLite在应用程序进程中作为DLL运行,而不是在单独的SQL引擎进程中运行,对SQLite的必要性就小得多了。因此,实现所有业务逻辑(包括用宿主语言编写的SP代码)更有意义。
但是,您可以在主机语言(PHP, Python, Perl, c#, Javascript, Ruby等)中使用自己的用户定义函数扩展SQLite。然后,您可以将这些自定义函数用作任何SQLite选择/更新/插入/删除的一部分。我已经在c#中使用DevArt的SQLite实现了密码散列。
其他回答
SQLite不得不牺牲一些人认为有用的其他特性,比如高并发性、细粒度访问控制、丰富的内置函数集、存储过程、深奥的SQL语言特性、XML和/或Java扩展、兆字节或千兆字节的可伸缩性,等等
来源:适当使用SQLite
如果你仍然感兴趣,Chris Wolf用存储过程实现了SQLite的原型。您可以在他的博客文章中找到详细信息:向SQLite添加存储过程
回答:不
原因如下……我认为将proc存储在数据库中的一个关键原因是,您在与SQL引擎相同的进程中执行SP代码。这对于设计为网络连接服务的数据库引擎来说是有意义的,但考虑到SQLite在应用程序进程中作为DLL运行,而不是在单独的SQL引擎进程中运行,对SQLite的必要性就小得多了。因此,实现所有业务逻辑(包括用宿主语言编写的SP代码)更有意义。
但是,您可以在主机语言(PHP, Python, Perl, c#, Javascript, Ruby等)中使用自己的用户定义函数扩展SQLite。然后,您可以将这些自定义函数用作任何SQLite选择/更新/插入/删除的一部分。我已经在c#中使用DevArt的SQLite实现了密码散列。
我自己也遇到过这个问题。我认为php pdo支持存储过程,但该模块正在处理它,并构建正常的sql查询发送到sqlite。因此,在php中,可以在代码中编写存储过程,但使用它们并不能提高性能。
如果我说错了,请指正。
Yet, it is possible to fake it using a dedicated table, named for your fake-sp, with an AFTER INSERT trigger. The dedicated table rows contain the parameters for your fake sp, and if it needs to return results you can have a second (poss. temp) table (with name related to the fake-sp) to contain those results. It would require two queries: first to INSERT data into the fake-sp-trigger-table, and the second to SELECT from the fake-sp-results-table, which could be empty, or have a message-field if something went wrong.
推荐文章
- 是否有一种使用Dapper调用存储过程的方法?
- 创建存储过程和SQLite?
- SQLite并发访问
- 如何连接字符串与填充在sqlite
- 在Android SQLite中处理日期的最佳方法
- 执行带有Output参数的存储过程?
- SQLite数据库文件使用什么扩展名重要吗?
- 无法加载DLL 'SQLite.Interop.dll'
- 快速简单的方法迁移SQLite3到MySQL?
- 在Ubuntu上安装sqlite3-ruby错误
- sqlite3。ProgrammingError:提供的绑定数量不正确。当前语句使用1,并提供了74个
- SQLite有。net / c#包装器吗?
- 与代码相比,将SQL保存在存储过程中有哪些优点和缺点
- 在SQL Server 2005中,使用存储过程检查字符串是否包含子字符串
- Android开发有什么好的ORM工具吗?