在SQL存储过程中循环插入多列游标内容

时间:2012-10-28 03:46:57

标签: java sql oracle stored-procedures jdbc

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

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

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

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

由于

1 个答案:

答案 0 :(得分:2)

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

  1. 以1000个批次检索订单项(不要同时淹没包含太多项目的java程序)。
  2. 将记录插入LineItem表,其中包含行项记录中的必需列。
  3. 在迭代表示订单项的记录时,扣除标题记录的详细信息。
  4. 在批量处理所有订单项的最后,将标题记录插入数据库。
  5. 我们使用JPA(使用hibernate)和Spring,并且所有上述步骤都在一个事务中执行。