【发布时间】:2011-09-04 21:47:53
【问题描述】:
我正在寻找处理这种情况的最佳方法。我想在数据库表中存储摊销计划。每行包含日期、当前余额、付款、本金、利息和新余额。对于典型的 30 年抵押贷款,这将是 360 行或数据库插入。
我应该使用 Delphi 在循环内进行计算并对每个结果进行插入,还是应该在存储过程中进行这些计算?
这将是单个用户、本地计算机、桌面应用程序。
【问题讨论】:
标签: database delphi stored-procedures loops
我正在寻找处理这种情况的最佳方法。我想在数据库表中存储摊销计划。每行包含日期、当前余额、付款、本金、利息和新余额。对于典型的 30 年抵押贷款,这将是 360 行或数据库插入。
我应该使用 Delphi 在循环内进行计算并对每个结果进行插入,还是应该在存储过程中进行这些计算?
这将是单个用户、本地计算机、桌面应用程序。
【问题讨论】:
标签: database delphi stored-procedures loops
准备好的查询和存储过程在性能方面具有可比性。作为应用程序开发人员,我非常讨厌存储过程,因为它们将逻辑从应用程序内部(我可以在其中找到)转移到查看源代码时不可见的其他地方。让我们面对现实吧,没有人会用不同的语言重新开发一个应用程序,如果它有效的话。
因此,如果您喜欢数据库和 SQL,并且您对此感到满意,那么存储过程就可以了。但是,如果您主要是应用程序开发人员,我看不出使用存储过程比从代码执行查询有什么好处。
【讨论】:
我会在存储过程中进行操作。这种处理数据的方式是在它所属的数据库中。
此外,通过将所有与数据相关的操作保留在数据库中,如果您将来选择切换语言,您就可以省去再次编码的麻烦。
【讨论】:
如果您碰巧使用AnyDAC,它支持所有支持的数据库的 ArrayDML。我认为这是一个很好的功能。这是商业软件,但是非常好的投资。 (除了作为一个非常满意的客户之外,我与他们没有任何关系。)
【讨论】:
如果您的数据库是本地数据库,并且您不打算将其设置为客户端/服务器,那么从性能角度来看可能差别不大。很大程度上取决于您使用的数据库。 有些具有“数组 DML”,它允许您在一次数据库往返中执行所有 360 次插入,基本上不是执行 360 次插入,而是填充数组绑定变量并执行一次插入。无论如何,最糟糕的方法是使用没有绑定变量的 n 插入。 如果数据库不编译,编译和优化的 Delphi 代码可能比解释的存储过程代码快一些(有些可能只使用 P-Code)。 从设计的角度来看,将数据逻辑放在 DB 中,通过存储过程发布一种 API(可能禁止其他修改数据的方式),可以确保对数据的更强控制。
【讨论】: