我是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
coalesce
(可选nvl
或case 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