是否有任何替代存储过程,安全和快速以及存储过程。我只知道休眠。有没有其他类似的技术?
8 回答
存储过程是放置在数据库上执行的代码(SQL)的地方,所以我理解这个问题的意思
“还有其他方法可以打包在数据库上运行的代码吗?”
有几个答案:
- 没有其他东西与存储过程完全相同,但您可能会考虑其他替代方案。
- 您可以在客户端代码(java 或其他)中将所有 SQL 编写为字符串
- 然而,这有各种问题(封装丢失、紧密耦合 -> 更难维护),这不是一个好主意。
- 您可以使用诸如 NHibernate 之类的 ORM,它在您的客户端逻辑和数据库之间插入一个层。ORM 生成 SQL 以在数据库上执行。使用 ORM,表达复杂的业务逻辑比在存储过程中更难(全面概括!)。
- 一种折衷方案是在 Java(或您正在使用的任何软件)中定义您自己的数据访问层(DAL),并将其与客户端代码的主体(单独的类/命名空间/等)分开,以便您的客户端调用 DAL,DAL 解释这些并将 SQL 发送到数据库,将数据库中的结果返回给客户端。
是的。你可以使用动态sql,但我个人更喜欢存储过程。
1)如果您使用的是 MS SQL Server,它将生成一个查询计划,该计划应该使存储过程比简单的动态 sql 执行得更快。
2)修复存储过程中的错误可能更容易更有效,特别是如果您的应用程序在多个位置调用该过程。
3) 我发现将数据库逻辑封装在数据库中而不是嵌入 sql 或应用程序配置文件中是很好的。
4) 在数据库中创建存储过程将允许 sql server 在设计时执行一些语法和验证检查。
您可以像存储过程一样安全和快速地执行动态 SQL,它只需要一些工作。当然,使存储过程安全和快速也需要一些工作。
存储过程是访问关系数据库系统的应用程序可用的子例程。存储过程(有时称为 proc、sproc、StoPro 或 SP)实际上存储在数据库数据字典中。
存储过程的典型用途包括数据验证(集成到数据库中)或访问控制机制。此外,存储过程用于整合和集中最初在应用程序中实现的逻辑。可能需要执行多个 SQL 语句的大型或复杂处理被移动到存储过程中,并且所有应用程序只调用这些过程。
存储过程类似于用户定义的函数 (UDF)。主要区别在于 UDF 可以像 SQL 语句中的任何其他表达式一样使用,而存储过程必须使用 CALL 语句调用
..来自维基百科
我认为您需要阅读这篇文章并重新提出您的问题。Hibernate 与存储过程无关。
如果您说为什么要寻找替代品,那会有所帮助,您不喜欢存储过程呢?
一些数据库(例如 PostgreSQL)还允许您用不同的语言编写存储过程。因此,如果您真的想要,您可以用 Python 或 Java 等来编写它们,而不是 SQL。
我认为 OP 意味着直接在他的应用程序代码中编写所有数据库代码的替代方法是调用存储过程或使用诸如 Hibernate 之类的 ORM 在他的应用程序代码和数据库之间引入一层分离,但是是的,它们非常不同的东西。
使用存储过程可以让您将 SQL 与应用程序代码分开存放在一个地方。使用 Hibernate 可以让您完全避免编写 SQL 并提供关系数据库的对象表示。
你走哪条路很大程度上取决于应用程序和你自己的偏好。
嗯,在我看来,存储过程的明显替代方案是编写应用程序代码。例如,不必编写存储过程来在每次过帐贷方时过帐借方,您可以编写同时写入两者的应用程序代码。
也许我在这里过于简单化或错过了问题的重点。