存储过程和准备语句之间有什么区别...哪个更好以及为什么...!!我试图用谷歌搜索它,但没有找到更好的文章......
存储过程是 PL/SQL 语言的指令序列。是由某些 DBMS 实现的编程语言,可让您存储经常应用于模型的查询序列,并与应用程序层共享处理负载。
准备好的语句是用占位符而不是实际值编写的查询。您编写查询,DBMS 仅对其进行一次编译,然后您只需传递值以放入占位符中。使用准备好的语句的优点是可以显着提高性能,并保护您的应用程序免受 SQL 注入。
区别在于您无法存储准备好的语句。每次需要执行时,您都必须“准备”它们。另一方面,存储过程可以存储并与模式关联,但您需要了解 PL/SQL 才能编写它们。
您必须检查您的 DBMS 是否支持它们。
两者都是非常有用的工具,您可能想结合使用。
希望这个简短的解释对您有用!
其他答案已经暗示了这一点,但我想明确列出优点和缺点:
存储过程
优点:
缺点
准备好的声明
优点
缺点
为了我的钱,我每次都会选择存储过程,因为它们只需要编写和编译一次。此后,每次调用该过程都会节省时间,无论您是否处于新连接上,也无论您是否在循环中调用该过程。唯一的缺点是需要花一些时间学习编程语言。如果我没有编写存储过程的权限,我会使用准备好的语句,但前提是我必须在同一会话中多次重复执行相同的查询。
这是我对这两种结构之间的差异进行了几个月断断续续的研究后得出的结论。如果有人能够纠正我所做的错误概括,那么任何声誉损失都是值得的。
我在上面的分析中忽略了安全问题。那是因为我不知道存储过程和准备语句之间的安全性有任何差异。 (如果有显着差异,我有兴趣学习它们。)
存储过程存储在数据库中 - 取决于它被编译的数据库(Oracle、MS SQL Server 等),并且当您在服务器上创建它时可能会进行优化...
准备好的语句是由服务器解析的语句,并且每当您运行该语句时,服务器都会创建一个执行计划以供执行...通常当一条语句运行多次时才有意义...取决于数据库服务器(Oracle 等),甚至有时配置选项这些“准备”要么是特定于会话的,要么是“全局”...
当您比较这两者时,没有“更好”,因为它们有其特定的用例......