存储过程有替代方法吗?

时间:2008-10-06 17:27:50

标签: database stored-procedures

是否存在替代存储过程,安全快速以及存储过程的替代方法。我只知道Hibernate。还有其他类似的技术吗?

8 个答案:

答案 0 :(得分:12)

存储过程是放置在数据库上执行的代码(SQL)的地方,所以我理解这个问题意味着

“有没有其他方法来打包在数据库上运行的代码?”

有几个答案:

  • 与存储过程完全相同,但您可以考虑使用其他选项。
  • 您可以将所有SQL编写为客户端代码中的字符串(java或其他)
    • 然而,这有各种问题(封装丢失,紧耦合 - >更难维护),并不是一个好主意。
  • 您可以使用ORM,例如NHibernate,它在您的客户端逻辑和数据库之间插入一个层。 ORM生成SQL以在数据库上执行。使用ORM,表达复杂的业务逻辑比存储过程更难(全面推广!)。
  • 一种中途的方法是在java中定义您自己的数据访问层(DAL)(或者您正在使用的Watever)并将其与客户端代码的主体(单独的类/命名空间/等)分开,以便您的客户端调用DAL,DAL解释这些并将SQL发送到数据库,将结果从数据库返回给客户端。

答案 1 :(得分:7)

是。你可以使用动态sql,但我个人更喜欢存储过程。

1)如果您正在使用MS SQL Server,它将生成一个查询计划,该计划应该使存储过程比简单的动态SQL更快地执行。

2)修复存储过程中的错误可能更容易,特别是如果您的应用程序在多个位置调用该过程。

3)我发现将数据库逻辑封装在数据库中而不是嵌入式sql或应用程序配置文件中是很好的。

4)在数据库中创建存储过程将允许sql server在设计时执行一些语法和验证检查。

答案 2 :(得分:4)

Hibernate是一种对象/关系持久性服务。

存储过程是关系数据库系统中的子程序。

不一样。

如果您想要替代Hibernate,可以查看iBatis for Spring

答案 3 :(得分:3)

您可以像存储过程一样安全快速地执行动态SQL,只需要一些工作。当然,使存储过程安全且快速也需要一些工作。

答案 4 :(得分:2)

  

存储过程是子例程   可用于访问的应用程序   关系数据库系统。存储   程序(有时称为proc,   实际上是sproc,StoPro或SP)   存储在数据库中的数据   字典。

     

存储过程的典型用途   包括数据验证(集成   进入数据库)或访问控制   机制。此外,存储   程序用于巩固和   集中最初的逻辑   在应用程序中实现大或   可能需要的复杂处理   执行几个SQL   语句被移动到存储中   程序,以及所有应用程序调用   只是程序。

     

存储过程类似于   用户定义的函数(UDF)。该   主要区别在于UDF可以   像其中任何其他表达一样使用   SQL语句,而存储   必须使用以下方法调用过程   CALL声明

..来自Wikipedia

我认为您需要阅读这篇文章并重新构建您的问题。 Hibernate与存储过程无关。

答案 5 :(得分:1)

如果你说为什么要寻找替代品,它会有所帮助, 你不喜欢存储过程怎么样?

某些数据库(例如PostgreSQL)也允许您编写存储过程 不同的语言。所以如果你真的想要,你可以用Python或者用它们写 Java等,而不是SQL。

答案 6 :(得分:0)

嗯,在我看来,存储过程的明显替代方法是编写应用程序代码。而不是说,每次发布信用额度时编写存储过程来发布借记,您可以编写写入两者的应用程序代码。

也许我在这里过于简单,或者忽略了问题的重点。

答案 7 :(得分:0)

我认为OP意味着直接在他的应用程序代码中编写所有数据库代码的替代方法是调用存储过程或使用ORM(例如Hibernate)在他的应用程序代码和数据库之间引入一层分离,但是他们是非常不同的东西。

使用存储过程可以将SQL保存在与应用程序代码分开的位置。使用Hibernate可以避免完全编写SQL并提供关系数据库的对象表示。

您走的方式取决于应用程序和您自己的偏好。