我开始的工作程序,这或许是最自然的描述为一批计算数据库表,并将执行每月一次。所有输入是在Oracle数据库表,以及所有会输出到Oracle数据库的数据表。该程序应该留在维护多年来。

这似乎直接实施这一系列的存储程序,每个执行合理的转变,例如分配费用之间的部门根据一些业务规则。然后我就可以写单元的测试,以检查,如果出的每一转变是因为我的预期。

它是一个坏主意,要做到这一切,在PL/SQL?你宁愿做的重批计算,在一个典型的面向对象编程语言,例如C#?是不是更多的表现使用数据库为中心的程序语言,例如PL/SQL?

有帮助吗?

解决方案

通常我说把少在PL/SQL尽可能-这是通常很少可维护的-在我最后工作我真的看到有多乱,难以与它的工作可以得到的。

然而,由于它是批量处理和由于输入和输出这两个数据库-这很有意义投入的逻辑进入PL/SQL-尽量减少"运动的部分"。但是,如果它们的业务逻辑或分使用的其他部分的你的系统-我会说不这样做。

其他提示

你描述的以下要求

a)必须能够实施批量处理 b)结果必须是可维护的

我的反应:

  1. PL/SQL的目的是要实现什么您描述。同样重要的是要注意有效PL/SQL,不提供其他工具。一个存储程序的语言把处理下的数据-这是批量处理应该坐下。
  2. 它很容易写的不好可维护的代码,在任何语言。

具有说上面,你的实施将取决于可用的技能、适当的设计和遵守良好质量的进程。

要有效实施必须处理数据批量(选择在批和insert/update在批).危险与OO的方法是,很容易会导致对一个设计的处理数据的行列。这种类型的方法含有不必要的开销,并将明显少于有效设计的处理数据分批排。

它是能够使用这两种方法的成功。

马修*巴特勒

一些对其他评论者要注意的问题是关于PL/SQL,不SQL。一些答案有明显被关SQL,不PL/SQL。PL/SQL是一个功能齐全的数据库的语言,它的成熟。有一些缺点,但对于这种类型的海报的事情要做,这是非常好的。

不,这不一定是个坏主意。如果解决方案似乎很简单你并允许你在测试和验证每个过程,其听起来像这可能是一个好主意。OO平台可以是(虽然他们不必)坏的大型数据组,作为对象的创造和开销可以杀性能。

Oracle设计PL/SQL问题像你这样的记住,如果有足够的企业的知识的数据库和PL/SQL这似乎是一个合理的解决方案。保持大批集中心,因为每个电话从PL/SQL实际SQL引擎是一背景下开关,所以单记录的过程应当一起进行批处理尽可能提高的性能。

只要确保你不知怎的日志发生了什么的话,它的工作。否则你就会有一个黑盒,它会卡住的地方的时间,只想知道是否停止或让它工作'一点。

PL/SQL是一个成熟的语言,整合以及与SQL。每个版本的Oracle它变得更强大。还开始从Oracle11、PL/SQL编译成机器码的默认。

我写了大量的批量处理和报告产生的节目在这两个PL/SQL和亲C用于一个项目。他们一般优先我写在PL/SQL作为自己的开发人员将保留在未来的发现更容易理解比亲C码。

它结束了只有真时髦的处理或报告说,结束了被写在Pro*C。

这是没有必要写入这些作为保存程序如其他人已经提到的,它们可以只脚本文件的运行,如有必要,那种喜欢一个壳脚本。使源代码版本控制和移徙之间的测试和生产系统的一个见鬼的一个容易得多,也。

只计算你需要执行可以充分和可读性捕获PL/SQL,然后只用PL/SQL会做的最有意义。

真正捕捉是维护--这是非常易于编写不可维护SQL,如果仅仅因为每一个数据库具有不同的语法和不同的功能设置一旦你之外的步骤简单的SQL仔细分析后,并没有真正的标准格式。评论,等等。

我已经创建了批处理程序使用C#和SQL。

利C#:

你已经得到了完整的图书馆。净的所有权力的一个面向对象的语言。

弊C#:

*批处理程序和数据库独立的-这意味着,只有管理批处理程序的独立的数据库。

*你需要逃避所有党sql代码。

赞成SQL:

*很好地集成与DBMS。如果这工作的唯一操纵的数据库,它将是有意义的,包括它的数据库。你最终有一个单一数据库和所有其组成部分在一个软件包。

*不要逃避sql码

*保持它的现实-你正在编写在你的问题领域

弊SQL:

其SQL和我本人只是不知道这一点以及SQL。

在一般情况下,我会坚持使用SQL因为利弊上文所述。

这是一个装载问题:) 有一对夫妇的数据库编程建筑的设计你应该知道的,什么他们的成本/效益。2级一般意味着你有一个客户连接到一个数据库,发行直接SQL话。3级一般意味着你有一"的应用程序服务器",这是发放直接SQL调的数据库,但是客户说话的应用程序服务器。一般来说,这提供了"扩展"。最后,你有2个1/2的分层应用程序,采用2级样的格式,只有在工作条块分割的内存储程序。

你过程中听起来像一个"后台办公室"的事情和客户/工艺需要的只是结果,正在汇总和缓存在一个每月一次的基础。就是说,没有代理的连接,并连接往往,并说"这些计算"。而不是你暗示的一个过程,一旦发生在一段时间,你可以摆脱非现实的时间。

因此,鉴于这些要求,我想说的是,一般来说,它将以更快的速度接近的数据,并让SQL服务器做所有的计算。我认为你会找到的,邻近的数据将会为您提供服务。

然而,在执行这些计算,你可能会发现,一些计算是不适合SQL服务器。举个例子计算的应计利息的债券或任何固定收入的文书。不是很漂亮在SQL,并且更适合于一个更丰富的语言。但是,如果你只需简单平均数和其他比较理智的聚集体,我会坚持到存储程序,在SQL侧。

再次,没有足够的信息的性质的计算,或者是你的房子的任务规定方面的SQL能力开发的支持,或者是你的老板说...但因为我知道我周围的方法SQL,并以接近的数据,我会留纯SQL/存储程序,用于任务这样的。

情况因人而异:)

它通常不是更多的表现,因为大多数储存的程序语言的吸通过设计。但它可能会运行速度快于在外部应用程序。

我想这可以归结到你怎么熟悉与PL/SQL,你有多少时间来编写这一点,是多么的重要性,并如果可以合理地期望维护者以足够的熟悉PL/SQL保持一个很大的程序编写的。

如果速度是不相关的,并维护者可能会不PL/SQL熟练的,你可能会更好使用"传统"的语言。

你也可以使用混合方法,在使用PL/SQL产生的中间数据(所说,表连接和数额或任何)和独立应用控制的流动和检查价值和错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top