![]() |
|
Archives of the TeradataForumMessage Posted: Mon, 18 Mar 2013 @ 20:00:12 GMT
I want to use the Merge statement (in a Macro) but only to Insert certain Columns, leaving the Nullable Columns alone (i.e. not to have to mention them) Take this cut-down example,
CREATE MULTISET TABLE bookingorder_test1 ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT
(
COM_ID CHAR(2) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL COMPRESS 'WW',
BUL_ID CHAR(5) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL COMPRESS 'MA2 ',
ORD_ID CHAR(7) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
ORD_SRKY_ID INTEGER NOT NULL,
ORD_SRCE_SYSTEM_CD CHAR(2) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL COMPRESS 'MB',
ORD_SEQ_NR BYTEINT NULL COMPRESS 1 ,
ORD_CONT_VL DECIMAL(9,3) NULL COMPRESS 0.000 ,
ORD_CONT_WT DECIMAL(9,3) NULL COMPRESS 0.000 )
UNIQUE PRIMARY INDEX ORDER_UPI ( ORD_SRKY_ID );
If I mention all Columns then it's fine ...
MERGE INTO BOOKINGORDER_TEST1 TGT
USING (SELECT ORD_SRKY_ID ,COM_ID
,BUL_ID
,ORD_ID
,ORD_SRCE_SYSTEM_CD
,ORD_SEQ_NR
,ORD_CONT_VL
,ORD_CONT_WT
FROM BOOKINGORDER1)
AS BO_IN (ORD_SRKY_ID, COM_ID,BUL_ID
,ORD_ID
,ORD_SRCE_SYSTEM_CD
,ORD_SEQ_NR
,ORD_CONT_VL
,ORD_CONT_WT)
ON BO_IN.ORD_SRKY_ID=TGT.ORD_SRKY_ID
WHEN MATCHED THEN UPDATE
SET ORD_CONT_VL=TGT.ORD_CONT_VL + 1
WHEN NOT MATCHED THEN INSERT
VALUES (
BO_IN.COM_ID
,BO_IN.BUL_ID
,BO_IN.ORD_ID
,BO_IN.ORD_SRKY_ID
,BO_IN.ORD_SRCE_SYSTEM_CD
,BO_IN.ORD_SEQ_NR
,BO_IN.ORD_CONT_VL
,BO_IN.ORD_CONT_WT );
99674 processed but if I when I leave out the Columns that I don't want to explicitly mention ...
MERGE INTO BOOKINGORDER_TEST1 TGT
USING (SELECT ORD_SRKY_ID ,COM_ID
,BUL_ID
,ORD_ID
,ORD_SRCE_SYSTEM_CD
,ORD_SEQ_NR
--,ORD_CONT_VL
--,ORD_CONT_WT
FROM BOOKINGORDER1)
AS BO_IN (ORD_SRKY_ID, COM_ID,BUL_ID
,ORD_ID
,ORD_SRCE_SYSTEM_CD
,ORD_SEQ_NR
--,ORD_CONT_VL
--,ORD_CONT_WT
)
ON BO_IN.ORD_SRKY_ID=TGT.ORD_SRKY_ID
WHEN MATCHED THEN UPDATE
SET ORD_CONT_VL=TGT.ORD_CONT_VL + 1
WHEN NOT MATCHED THEN INSERT
VALUES (
BO_IN.COM_ID
,BO_IN.BUL_ID
,BO_IN.ORD_ID
,BO_IN.ORD_SRKY_ID
,BO_IN.ORD_SRCE_SYSTEM_CD
,BO_IN.ORD_SEQ_NR
--,BO_IN.ORD_CONT_VL
--,BO_IN.ORD_CONT_WT
);
I get .... 3812 the positional assignment has too few values. .. and true enough. But, I can't seem to do this :
MERGE INTO BOOKINGORDER_TEST1 TGT
(ORD_SRKY_ID ,COM_ID
,BUL_ID
,ORD_ID
,ORD_SRCE_SYSTEM_CD
,ORD_SEQ_NR)
TGT
USING (SELECT ORD_SRKY_ID ,COM_ID
,BUL_ID
,ORD_ID
,ORD_SRCE_SYSTEM_CD
,ORD_SEQ_NR
--,ORD_CONT_VL
--,ORD_CONT_WT
FROM BOOKINGORDER1)
AS BO_IN (ORD_SRKY_ID, COM_ID,BUL_ID
,ORD_ID
,ORD_SRCE_SYSTEM_CD
,ORD_SEQ_NR
--,ORD_CONT_VL
--,ORD_CONT_WT
)
ON BO_IN.ORD_SRKY_ID=TGT.ORD_SRKY_ID
WHEN MATCHED THEN UPDATE
SET ORD_CONT_VL=TGT.ORD_CONT_VL + 1
WHEN NOT MATCHED THEN INSERT
VALUES (
BO_IN.COM_ID
,BO_IN.BUL_ID
,BO_IN.ORD_ID
,BO_IN.ORD_SRKY_ID
,BO_IN.ORD_SRCE_SYSTEM_CD
,BO_IN.ORD_SEQ_NR
--,BO_IN.ORD_CONT_VL
--,BO_IN.ORD_CONT_WT
);
as I get a syntax error. Is the Merge statement really that restrictive ? Does it really demand ALL Columns be set to explicitly set to a value ? Regards David Clough
| ||||||||||||||||||||||||||||||||||||||||||||||||
| | ||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||
| Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||
| Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||