在Delphi中,我应该在循环中使用多个数据库插入还是使用存储过程?

时间:2011-09-04 21:47:53

标签: database delphi stored-procedures loops

我正在寻找处理这种情况的最佳方法。我想在数据库表中存储一个摊销计划。每行包含日期,当前余额,付款,市政,利息和新余额。对于典型的30年抵押贷款,这将是360行或数据库插入。

我应该使用Delphi在循环内进行计算并为每个结果执行插入操作,还是应该在存储过程中执行这些计算?

这将是单个用户,本地计算机,桌面应用程序。

4 个答案:

答案 0 :(得分:8)

准备好的查询和存储过程在性能方面具有可比性。作为一名应用程序开发人员,我非常厌恶存储过程,因为他们将逻辑从应用程序内部(我可以找到它)移动到查看源代码时看不到的其他位置。让我们面对现实吧,没有人会用不同语言重新开发应用程序。如果有效的话。

因此,如果你的东西是数据库和SQL,并且你对此感到满意,那么存储过程就可以了。但是,如果您主要是应用程序开发人员,那么使用存储过程而不是从代码执行查询时,我看不到任何好处。

答案 1 :(得分:5)

我会在存储过程中执行操作。这样处理数据就在它所属的数据库中。

此外,通过将所有与数据相关的操作保存在数据库中,如果将来某个时候您选择切换语言,则可以节省编码的麻烦。

答案 2 :(得分:2)

如果您碰巧使用AnyDAC,它支持所有受支持数据库的ArrayDML。我认为这是一个很好的功能。这是商业软件,但投资非常好。 (除非作为一个非常满意的客户,否则我不会以任何方式与他们联系。)

请参阅Very High Performance using the Array DML

答案 3 :(得分:0)

如果您的数据库是本地数据库,并且您没有将其设置为客户端/服务器,那么从性能角度来看可能没什么区别。很大程度上取决于您使用的数据库。 有些具有“数组DML”,它允许您在一个数据库往返中执行所有360个插入,基本上不是执行360插入,而是填充数组绑定变量并执行单个插入。无论如何,最糟糕的方式是使用没有绑定变量的n个插入。 编译和优化的Delphi代码可能比解释的存储过程代码快一些,如果数据库没有编译它(有些可能只使用P代码)。 从设计的角度来看,将数据逻辑放在数据库中通过存储过程发布一种API(可能禁止其他修改数据的方式)可以确保对数据的更强控制。