存储过程与准备语句之间的差异?

ars*_*nal 34 stored-procedures prepared-statement

存储过程和准备语句之间有什么区别......哪一个更好,为什么...... !! 我试图谷歌但没有更好的文章......

Thr*_*oze 45

存储过程是PL/SQL语言中的一系列指令.是一种由某些DBMS实现的编程语言,它允许您存储经常应用于模型的查询序列,并与应用程序层共享处理负载.

准备语句是使用占位符而不是实际值编写的查询.您编写查询并且它只由DBMS编译一次,然后您只需将值传递到占位符中.使用预准备语句的优点是可以显着提高性能,并保护您的应用程序免受SQL注入.

不同的是你不能存储准备好的陈述.每次需要执行时,您必须"准备"它们.另一方面,存储过程可以存储,与模式相关联,但是您需要知道PL/SQL来编写它们.

您必须检查您的DBMS是否支持它们.

两者都是非常有用的工具,您可能想要结合使用.

希望这个简短的解释对你有用!


Yah*_*hia 12

存储过程存储在数据库中 - 取决于在服务器上创建它时编译并可能已准备好的数据库(Oracle,MS SQL Server等)...

准备好的语句是由服务器解析的语句,并且每当您运行语句时,服务器都会创建执行计划,准备执行...通常,当语句多次运行时,它是有意义的...取决于数据库服务器(Oracle等)甚至有时配置选项这些"准备"是会话特定的或"全局的"...

比较这两者时没有"更好",因为它们具有特定的用例......


Ran*_*art 10

其他答案暗示了这一点,但我想明确列出优点和缺点:

存储过程

优点:

  1. 与直接查询相比,每个查询的处理速度更快,因为服务器会对其进行预编译。
  2. 每个查询只需要编写一次。它可以根据需要执行多次,甚至可以在不同的会话和不同的连接之间执行。
  3. 允许查询包含仅在SQL中无法编写或难以编写的编程构造(例如循环,条件语句和错误处理)。

缺点

  1. 需要了解数据库服务器使用的任何编程语言。
  2. 有时可能需要特殊权限才能编写或调用它们。

准备的陈述

优点

  1. 像存储的例程一样,因为查询是预编译的,所以很快。

缺点

  1. 需要与每个连接或会话重新编译。
  2. 为了节省开销,每个准备好的语句必须执行一次以上(例如在循环中)。如果查询仅执行一次,则准备语句的准备工作将比您返回的开销更多,因为服务器无论如何都需要编译SQL,而且还需要准备语句。

为了我的钱,我每次都会使用存储过程,因为它们只需要编写和编译一次。之后,每次调用该过程都可以节省时间,无论您是否处于新连接中,以及是否以循环方式调用该过程。唯一的缺点是需要花一些时间学习编程语言。如果我没有写存储过程的权限,则可以使用一条准备好的语句,但前提是必须在同一会话中多次重复执行同一查询。

这是我对这两种结构之间的差异进行了数月的反复研究后得出的结论。如果有人能够纠正我所做的错误概括,那么声誉损失将是值得的。