Hi,
below my stored procedure:
CREATE OR REPLACE PROCEDURE MY_PROC IS
ERR_NUM NUMBER;
ERR_MSG VARCHAR2(300);
V_COUNT NUMBER;
V_EM_ID VARCHAR2(64);
V_EM_NUMBER VARCHAR2(64);
V_NAME_FIRST VARCHAR2(64);
V_EMAIL VARCHAR2(64);
V_CELLULAR_NUMBER VARCHAR2(64);
V_STATUS VARCHAR2(64);
V_HONORIFIC VARCHAR2(64);
V_EMSTD VARCHAR2(64);
V_DP_ID VARCHAR2(64);
V_PCT_RM NUMBER;
V_DATA_CESSAZIONE DATE;
CURSOR A IS
SELECT A.MATRICOLA, A.CID_RIFERIMENTO, A.NOME, A.COGNOME, A.MAILBOX, A.DESC_QUALIFICA,
A.STATO, A.SESSO, DECODE (TRIM(A.DESC_QUALIFICA), 'Dirigente','DIR','Consulente',
'CONSUL','Quadro','QUADRO','Operaio','OPERAIO',
'Impiegato', DECODE(TRIM(A.LIVELLO),'4','IMP_QUARTO',
'5','IMP_QUINTO','6','IMP_SESTO','7','IMP_SETTIMO','IMP_NOLIVELLO' ),'NA') QUALIFICA_LIVELLO,
A.CODICE, A.PCTPARTTIME, A.DATA_CESSAZIONE
FROM WA_TO_AFM A
WHERE STATO='1';
BEGIN
FOR CUR_A IN A
LOOP
BEGIN
IF CUR_A.CID_RIFERIMENTO IS NULL THEN
SELECT COUNT(*)
INTO V_COUNT
FROM EM_BK B
WHERE B.EM_NUMBER=CUR_A.MATRICOLA;
IF V_COUNT = 0 THEN
INSERT INTO EM_BK (EM_ID, EM_NUMBER, NAME_FIRST,NAME_LAST, EMAIL ,STATUS, HONORIFIC, CONTINGENCY_EMAIL, DP_ID, PCT_RM, EM_STD, W_DATA_CESSAZIONE)
VALUES (CUR_A.COGNOME||'_'||SUBSTR(CUR_A.NOME,1,3)||SUBSTR(CUR_A.MATRICOLA,-2),
CUR_A.MATRICOLA, CUR_A.NOME,CUR_A.COGNOME, CUR_A.MAILBOX, CUR_A.STATO, CUR_A.SESSO, CUR_A.QUALIFICA_LIVELLO,
CUR_A.CODICE, NVL(CUR_A.PCTPARTTIME,1), DECODE (TRIM(CUR_A.DESC_QUALIFICA), 'Dirigente','DIR',
'Consulente','CONSUL',
'Quadro','FUNZ',
'Operaio','IMP',
'Impiegato','IMP'), CUR_A.DATA_CESSAZIONE);
-- here I'd like to handle EXCEPTION DUP_VAL_ON_INDEX FOR CUR_A.CID_RIFERIMENTO IS NULL
END IF;
ELSE -- CUR_A.CID_RIFERIMENTO IS NOT NULL
SELECT COUNT(*)
INTO V_COUNT
FROM EM_BK
WHERE EM_NUMBER=CUR_A.MATRICOLA;
IF V_COUNT=0 THEN
SELECT EM_ID,EMAIL,STATUS, HONORIFIC,CONTINGENCY_EMAIL, DP_ID, PCT_RM, W_DATA_CESSAZIONE
INTO V_EM_ID,V_EMAIL,V_STATUS, V_HONORIFIC,V_EMSTD, V_DP_ID, V_PCT_RM, V_DATA_CESSAZIONE
FROM EM_BK
WHERE EM_NUMBER=CUR_A.CID_RIFERIMENTO;
INSERT INTO EM_BK (EM_ID, EM_NUMBER, NAME_FIRST,NAME_LAST, EMAIL ,STATUS, HONORIFIC,CONTINGENCY_EMAIL, DP_ID, PCT_RM, EM_STD, W_DATA_CESSAZIONE,W_FLAG_CID_RIFERIMENTO)
VALUES (CUR_A.COGNOME||'_'||SUBSTR(CUR_A.NOME,1,3)||SUBSTR(CUR_A.MATRICOLA,-2),
CUR_A.MATRICOLA, CUR_A.NOME,CUR_A.COGNOME, V_EMAIL, V_STATUS,V_HONORIFIC,V_EMSTD, V_DP_ID, V_PCT_RM,
DECODE (TRIM(CUR_A.DESC_QUALIFICA), 'Dirigente','DIR',
'Consulente','CONSUL',
'Quadro','FUNZ',
'Operaio','IMP',
'Impiegato','IMP'), V_DATA_CESSAZIONE, 'Y');
END IF;
END IF;
-- here I'd like to handle EXCEPTION DUP_VAL_ON_INDEX FOR CUR_A.CID_RIFERIMENTO IS NOT NULL
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
INSERT INTO EM_BK (EM_ID, EM_NUMBER, NAME_FIRST,NAME_LAST, EMAIL ,STATUS, HONORIFIC,CONTINGENCY_EMAIL, DP_ID, PCT_RM, EM_STD, W_DATA_CESSAZIONE, W_FLAG_CID_RIFERIMENTO)
VALUES (CUR_A.COGNOME||'_'||SUBSTR(CUR_A.NOME,1,3)||SUBSTR(CUR_A.MATRICOLA,-2)||'_'||SUBSTR ('00000' || SEQ_EM_ID.NEXTVAL, -5),
CUR_A.MATRICOLA, CUR_A.NOME,CUR_A.COGNOME, V_EMAIL, V_STATUS,V_HONORIFIC,V_EMSTD, V_DP_ID, V_PCT_RM,
DECODE (TRIM(CUR_A.DESC_QUALIFICA), 'Dirigente','DIR',
'Consulente','CONSUL',
'Quadro','FUNZ',
'Operaio','IMP',
'Impiegato','IMP'), V_DATA_CESSAZIONE, 'Y');
END;
END LOOP;
COMMIT;
END;
I handle EXCEPTION DUP_VAL_ON_INDEX ONLY FOR CUR_A.CID_RIFERIMENTO IS NOT NULL
I'd like to handle EXCEPTION DUP_VAL_ON_INDEX ALSO FOR CUR_A.CID_RIFERIMENTO IS NULL
How can I modify my stored procedure (begin...end...innested)?
Thanks in advance!