我正在开始研究一个程序,这个程序可能最自然地被描述为数据库表的一批计算,并且将每月执行一次.所有输入都在Oracle数据库表中,所有输出都将输出到Oracle数据库表.该计划应在未来许多年内保持可维护状态.
将其实现为一系列存储过程似乎是直截了当的,每个存储过程都执行合理的转换,例如根据一些业务规则在部门之间分配成本.然后我可以编写单元测试来检查每个转换的输出是否符合我的预期.
在PL/SQL中完成所有操作是不是一个坏主意?您是否愿意在典型的面向对象编程语言(例如C#)中进行繁重的批量计算?使用像PL/SQL这样的以数据库为中心的编程语言是不是更具表现力?
您描述了以下要求
a)必须能够实施批处理b)结果必须是可维护的
我的回复:
PL/SQL旨在实现您所描述的内容.同样重要的是要注意PL/SQL中的效率在其他工具中是不可用的.存储过程语言将处理放在数据旁边 - 这是批处理应该处于的位置.
用任何语言编写难以维护的代码都很容易.
如上所述,您的实施将取决于可用的技能,正确的设计和对优质流程的遵守.
为了提高效率,您的实现必须批量处理数据(批量选择并批量插入/更新).面向对象方法的危险在于,很容易被引向逐行处理数据的设计.这种方法包含不必要的开销,并且与处理批量行数据的设计相比效率要低得多.
可以成功使用这两种方法.
马修巴特勒
其他评论者要注意的事情 - 问题是关于PL/SQL,而不是关于SQL.一些答案显然是关于SQL,而不是PL/SQL.PL/SQL是一种功能齐全的数据库语言,它也很成熟.有一些缺点,但对于海报想要做的事情,这是非常好的.
不,这不一定是个坏主意.如果解决方案看起来很简单并且允许您测试和验证每个过程,那么听起来它可能是一个好主意.OO平台可以(尽管它们不一定)对大型数据集不利,因为对象创建和开销会破坏性能.
Oracle设计的PL/SQL存在类似于您的问题,如果有足够的公司数据库和PL/SQL知识,这似乎是一个合理的解决方案.记住大批量设置,因为从PL/SQL到实际SQL引擎的每次调用都是上下文切换,因此应尽可能将单个记录进程批处理以提高性能.