将两行合并为一行Oracle PL / SQL

问题描述 投票:0回答:1

我是Oracle PL / SQL的新手。

我设法编写了一个函数,每次收到文本文件时,该函数都将被加载到表[[INTER中,然后从该表加载到TABLE1中。

但是现在我应该接收两个文件,这些文件的数据将被加载到表

INTER

中。其中一个具有一定数量的字段,另一个具有其余字段(NEW1,NEW2,NEW3)。我需要合并所有信息,以便在加载到TABLE1时将其合并为一行。 但是我不知道该如何实现...我将不胜感激...

这里您有我正在使用的代码(我添加了新字段)

MERGE INTO TABLE1 T1 USING (SELECT INTR.A , INTR.M , INTR.CODL , INTR.CODP , INTR.EX , INTR.SLS , INTR.MRG --, INTR.NEW1 -- , INTR.NEW2 -- , INTR.NEW3 , T2.COD2 FROM INTER INTR, TABLE2 T2, LOCALIZATION LOC, (SELECT M,A FROM DATES GROUP BY M,A) DAYS WHERE INTR.A = DAYS.A AND INTR.M = DAYS.M AND INTR.CODP = T2.CODP AND INTR.CODL = LOC.CODL) INTER ON ( (T1.A = INTER.A) AND (T1.M = INTER.M) AND (T1.CODL = INTER.CODL) AND (T1.CODP = INTER.CODP) AND (T1.COD2 = INTER.COD2) ) WHEN MATCHED THEN UPDATE SET T1.EX = INTER.EX ,T1.SLS = INTER.SLS ,T1.MRG = INTER.SLS --,T1.NEW1 = INTER.NEW1 --,T1.NEW2 = INTER.NEW2 --,T1.NEW3 = INTER.NEW3 ,T1.FLG = 'Y' ,T1.FECM = null WHEN NOT MATCHED THEN INSERT ( A ,M ,CODL ,COD2 ,CODP ,EX ,SLS ,MRG -- ,NEW1 -- ,NEW2 -- ,NEW3 ,FLG ,FECM ,FECC ) VALUES ( INTER.A , INTER.M , INTER.CODL , INTER.COD2 , INTER.CODP , INTER.EX , INTER.SLS , INTER.MRG /* */ , 'Y' , null , SYSDATE );

非常感谢。

**我的意思是PL / SQL代码,但是拼写检查器以某种方式更改了它

INTER TABLE

A NUMBER(4,0)M NUMBER(6,0)编码编号(10,0)CODP编号(4,0)EX NUMBER(10,2)SLS编号(10,2)MRG编号(10,2)NEW1 NUMBER(10,2)NEW2 NUMBER(10,2)NEW3 NUMBER(10,2)

TABLE1

A NUMBER(4,0)M NUMBER(6,0)编码编号(10,0)COD2 NUMBER(4,0)CODP编号(4,0)EX NUMBER(10,2)SLS编号(10,2)MRG编号(10,2)NEW1 NUMBER(10,2)NEW2 NUMBER(10,2)NEW3 NUMBER(10,2)FLG VARCHAR2(1字节)FECM日期FECC DATE

example of rows and combination

oracle merge
1个回答
0
投票
coalesce(可选nvlcase when)不能解决您的问题吗?仅update子句需要修改:

... when matched then update set t1.ex = coalesce(inter.ex, t1.ex), ... t1.new1 = coalesce(inter.new1, t1.new1), ... t1.flg = 'Y', t1.fecm = null

© www.soinside.com 2019 - 2024. All rights reserved.