Gestione degli errori in Stored Procedure DB2

lunedì 16 febbraio 2009 - 14.39

lmattioli Profilo | Newbie

Salve a tutti,
ho la necessità di creare una stored procedure per il database DB2. Questa stored procedure deve ricevere in input i valori da inserire in una tabella e deve restituire in output l'esito dell'operazione.
Il problema si pone quando cerco di intercettare gli eventuali errori d'inserimento (es. chiave duplicata) e li voglio restituire al chiamate con dei codici di errore personali: per esempio il codice d'errore 23505 (chiave duplicata) deve essere mappato diversamente.
Per essere più chiaro posto la stored.

CREATE PROCEDURE STP_INS_ANAG_DUE ( IN COD_ANAG VARCHAR(50),
IN DESC_ANAG VARCHAR(50),
OUT COD_RET VARCHAR(50),
OUT SQLSTATE_OUT CHAR(5),
OUT SQLCODE_OUT INT
)
SPECIFIC STP_INS_ANAG_DUE
MODIFIES SQL DATA
------------------------------------------------------------------------
P1: BEGIN
-- Dichiara variabili
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE SQLCODE INT DEFAULT 0;
-- Dichiara gestore

DECLARE EXIT HANDLER FOR SQLEXCEPTION
SELECT SQLSTATE, SQLCODE INTO SQLSTATE_OUT, SQLCODE_OUT
FROM SYSIBM.SYSDUMMY1;

IF TRIM(STP_INS_ANAG_DUE.COD_ANAG) = '' THEN
SET STP_INS_ANAG_DUE.COD_RET = 'FLY01';
RETURN 1;
END IF;

INSERT INTO ANAG (COD_ANAG, DESC_ANAG)
VALUES (STP_INS_ANAG_DUE.COD_ANAG, STP_INS_ANAG_DUE.DESC_ANAG);

SET SQLCODE_OUT = SQLCODE;
SET SQLSTATE_OUT = SQLSTATE;

IF SQLSTATE_OUT = '23505' THEN
SET STP_INS_ANAG_DUE.COD_RET = 'FLY02';
END IF;

END P1

Non riesco a valorizzare il parametro COD_RET poiché la stored si ferma prima quando si genera l'eccezione sql.

Grazie...ciao
mattio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5