1

我正在 ORacle 中编写一个复杂的存储过程,它可以做几件事,作为带有 JDBC 的 Java 程序的一部分。

首先,它需要执行一个非常复杂的 SELECT 以将信息读入游标,游标的每一行都表示发票的一个行项。输出游标中大约有 10 列。对于游标的每一行,需要将部分但不是所有字段插入到另一个表(称为 LineItem)中,除此之外,我需要获取游标中所有这些行的总和并在其中创建父行发票表。

将光标读回 Java 应用程序,然后根据需要迭代其内容执行 INSERTS 会更容易,还是可以在同一个存储过程中完成所有这些操作?我认为应该使用多个存储过程来避免复杂性,但不确定这是否可以完成并且是否将其全部保留为一个事务的一部分。

我试图避免创建一个超级复杂的存储过程,但也不想要一个可怕的解决方案。

谢谢

4

1 回答 1

2

我们也有类似的情况(处理发票及其行项目),我们执行以下操作:

  1. 分批检索 1000 个行项目(以免同时用太多项目压倒 java 程序)。
  2. 将记录插入到 LineItem 表中,其中包含来自行项目记录的所需列。
  3. 在遍历这些表示行项目的记录时推导出标题记录的详细信息。
  4. 在批量处理所有行项目结束时,将表头记录插入数据库。

我们为此使用 JPA (With hibernate) 和 Spring,并且上述所有步骤都在单个事务中执行。

于 2012-10-28T04:21:12.880 回答