填充SQL数据库时如何将字段连接到单个字段(Oracle)

时间:2015-06-24 09:51:12

标签: sql oracle triggers concatenation

我需要将来自单独程序的大量数据插入到单个表中(在Oracle SQL Developer中)。这种数据传输将朝着一个方向进行,这意味着系统偶尔会在表中转储大量数据,从而取代以前的数据。因此,我不必担心能够更新单个字段。我也无法修改此系统将数据传输到我的表中的方式,这意味着我无法将其字段映射到我的列标题(它只是使用INSERT后面的TRANSACTION_ID s发送数据场景)。

我希望该表具有唯一的TRANSACTION_ID列。但是,每个TRANSACTION_TYPE可能有多个TRANSACTION_TYPE,因此我会为每个ID收到多行,其中INSERT INTO TEST_TABLE (TRANSACTION_ID, TRANSACTION_TYPE) VALUES (1000, TT35) INSERT INTO TEST_TABLE (TRANSACTION_ID, TRANSACTION_TYPE) VALUES (1000, TT40) INSERT INTO TEST_TABLE (TRANSACTION_ID, TRANSACTION_TYPE) VALUES (1000, TT12) INSERT INTO TEST_TABLE (TRANSACTION_ID, TRANSACTION_TYPE) VALUES (1001, TT12) ......etc. 不同。 e.g:

 TRANSACTION_ID     TRANSACTION_TYPES
-----------------------------------------
  1000               TT35,TT40,TT12
  1001               TT12
  1002               TT40,TT23

我想将它们连接成一个用逗号分隔的单个字段,所以最终的表格如下:

MERGE

我意识到这会使数据失去正常化,但由于我不需要更新它,所以我并不过分担心。

我理解这样做的方法通常是使用INSERT,但由于我遇到源系统的TRANSACTION_TYPE操作,我无法使用它。是否可以使用触发器执行此操作?我在之前的尝试中遇到了变异表等错误。

最后的办法可能是将PIVOT存储在一个单独的表中,处理数据,然后删除第二个表,但这似乎过于复杂了。

是否有一种直截了当的方式来做到这一点我错过了?

由于

1 个答案:

答案 0 :(得分:0)

评论太长了。

您可能可以使用触发器执行此操作,但我不建议使用它。触发器需要替换insert,有时会执行插入操作,有时会连接值。

另外两个选项。首先,将数据加载到临时表中,然后为您的进程创建一个新表。

第二种方法是忽略该问题,并在查询时使用list_agg()将数据合并在一起。

相关问题