Thanks Stealth_DBA
I have tried this way even , but it makes no difference, if you use Select from Sysibm tables or use this way of declaration.
But basically what I see here is in Declaration part I had Set the SqlCOde_out as default to be zero, then after unsuccesful exceution of Insert , my sqlcode is <> 0 so the same should get stored into SqlCode_out in the next satement where I am using SET SQLCODE_OUT = SQLCODE; as mentioned below.
INSERT INTO SESN.TE_DEL
SELECT A.DOC_SY, A.BAN_SY,B.MNO, B.FORM_ID,P_VAR FROM SESN.SET_DOC AS A, SESN.SET2_DOC AS B
WHERE A.DOC_SY = B.DOC_SY
AND A.UP_DTTM is NOT NULL
AND A.START = 'UPED';
IF SQLCODE <> 0 THEN
-- SET SQLCODE_OUT = SQLCODE;
SET SQLERROR_VAR = 'NO STATS FOUND UPED FOR P_VAR';
SET MESSAGE_OUT = SQLERROR_VAR;
SET SQLSTATE_OUT = SQLSTATE;
SET SQLCODE_OUT = SQLCODE;
LEAVE P1;
ELSE
COMMIT;
END IF;
But strangely when i use instead statement as
INSERT INTO SESN.TE_DEL
SELECT A.DOC_SY, A.BAN_SY,B.MNO, B.FORM_ID,P_VAR FROM SESN.SET_DOC AS A, SESN.SET2_DOC AS B
WHERE A.DOC_SY = B.DOC_SY
AND A.UP_DTTM is NOT NULL
AND A.START = 'UPED';
IF SQLCODE <> 0 THEN
-- SET SQLCODE_OUT = SQLCODE;
SET SQLERROR_VAR = 'NO STATS FOUND UPED FOR P_VAR';
SET MESSAGE_OUT = SQLERROR_VAR;
SET SQLSTATE_OUT = SQLSTATE;
SET SQLCODE_OUT = 100;
LEAVE P1;
ELSE
COMMIT;
END IF;
; it gives me output as 100. so why it is not reading sqlcode for execution of the insert statement