如果没有记录,则跳过表更新-SQL

时间:2020-04-13 18:05:53

标签: sql oracle plsql

enter image description here我想将数据从旧表(table_old)迁移到新表(table_new)。

table_old具有以下列。

  • recordseq
  • 开始日期
  • 结束日期
  • field1
  • field2
  • field3
  • recordnum

table_new具有以下列。

  • recordseq
  • 开始日期
  • 结束日期
  • field1
  • field2
  • field3
  • field4
  • field5
  • field6
  • recordnum
  • recordnum_old

每个recordseq可以有多个记录,例如{<1 />}:
如果对于特定的recordnum有两个记录,则recordseq列数据中将出现1和2。

要求是在迁移数据时,旧表中的每两个记录应出现在1条记录中。

这里数据迁移意味着考虑使用recordnumfield1field2field3

例如,如果特定序列在旧表中有4条记录,则第一条记录将插入到recordnumfield1field2和第二行数据的新表的第一行中将被插入到field3field4field5中。

类似地,对于旧表中的第三行数据将被插入到field6field1field2中的新表的第二行中,并且第四行数据将被插入到{{1} },field3和新表第二行的field4

某些记录可能仅包含一个记录。不同的序列可能具有不同的记录编号。

在新表中,recordnum _old将保存旧表的recordnum列数据,并且迁移后recordnum将包含新记录号。

因此,在第一次迁移时,我们插入了recordseq,startdate,enddate和recordnum _old数据 而recordnum是一个常数,例如999,以后将更新为实际的recordnum。 之后,我们编写了下面的代码来迁移剩余的数据,如上所述,这些数据分别是field1,field2,field3。

field5

执行完毕后,可以通过检查没有分页号999的记录来过滤掉新记录

此代码的主要问题是,如果一个特殊序列仅具有一条记录,并且旧表中的最大记录数为5 在第一次迭代中,旧记录的第一行插入到行号为1的新表的第一行中,然后在第二次迭代中为recordnum覆盖空值,因为该记录序列没有更多记录了。

因此,我不想为新的seq更新表,该seq在遍历while循环时在旧表中没有更多记录。

您能帮我实现这一目标吗?

0 个答案:

没有答案