Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/10/2011, 09:48
VivaElPirateo
 
Fecha de Ingreso: septiembre-2011
Mensajes: 40
Antigüedad: 12 años, 7 meses
Puntos: 0
Pregunta Respuesta: Excepciones en Procedimientos Almacenados

Lo hice de esta forma:



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO


-- exec ProcedAlmac_Persona 'a','b','1'

ALTER PROCEDURE [dbo].[ProcedAlmac_Persona]
@nombre varchar(30),
@apellido varchar(20),
@rut varchar(12)
AS
BEGIN

set rowcount 0
SET ANSI_NULLS OFF
Declare @SRV_ReturnStatus int
select @SRV_ReturnStatus = 0

/*-----------------------------------------------------------------*/
/* NIVEL DE AISLAMIENTO PARA PROCESOS DE LECTURA SUCIA */
/*-----------------------------------------------------------------*/

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

/*-----------------------------------------------------------------*/
/*------------------------- Begin User Code -----------------------*/
/*-----------------------------------------------------------------*/
/*-----------------------------------------------------------------*/

/*-----------------------------------------------------------------*/
/* DECLARACION DE VARIABLES */
/*-----------------------------------------------------------------*/

Declare @mensaje Varchar(200)

/*-----------------------------------------------------------------*/
/* VALIDACIONES */
/*-----------------------------------------------------------------*/

If Len(@nombre) < 2 OR Len(@nombre) > 30 Begin
Set @mensaje ='ProcedAlmac_Persona: El nombre debe tener entre 2 y 30 caracteres '
Execute @SRV_ReturnStatus=SRV_MessageService @SRV_ReturnStatus,78000,@mensaje
Goto ProcedAlmac_Persona_Exit
End


If Len(@apellido) < 2 or Len(@apellido) > 20 Begin
Set @mensaje ='ProcedAlmac_Persona: El apellido debe tener entre 2 y 20 caracteres '
Execute @SRV_ReturnStatus=SRV_MessageService @SRV_ReturnStatus,78000,@mensaje
Goto ProcedAlmac_Persona_Exit
End


If Len(@rut) < 9 or Len(@rut) > 12 Begin
Set @mensaje ='ProcedAlmac_Persona: El RUT debe contener de 9 a 12 caracteres '
Execute @SRV_ReturnStatus=SRV_MessageService @SRV_ReturnStatus,78000,@mensaje
Goto ProcedAlmac_Persona_Exit
End

/*-----------------------------------------------------------------*/
/* INGRESAMOS LOS DATOS */
/*-----------------------------------------------------------------*/

INSERT INTO
tbl_persona
VALUES (
@nombre,
@apellido,
@rut);

If @@rowcount = 0 Or @@ERROR != 0 Begin
Set @mensaje ='ProcedAlmac_Persona: La persona no fue ingresada'
Execute @SRV_ReturnStatus=SRV_MessageService @SRV_ReturnStatus,78000,@mensaje
Goto ProcedAlmac_Persona_Exit
End



/*-----------------------------------------------------------------*/
/*------------------------- End User Code -------------------------*/
/*-----------------------------------------------------------------*/
ProcedAlmac_Persona_Exit:
If @SRV_ReturnStatus >= 60000
Begin
Return 0
End
Else Begin
Return 1
End
End


--select * from tbl_persona



Pero al ejecutarlo en Java por Consola (Eclipse), me tira este error:


Se detectó el error 78000, gravedad 16, estado 1, pero no se encontró ningún mensaje con ese número de error en sys.messages. Si el error es superior a 50000, asegúrese de que se agrega el mensaje definido por el usuario mediante sp_addmessage.
at com.microsoft.sqlserver.jdbc.SQLServerException.ma keFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.IOBuffer.processPacke ts(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.se ndExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.do Execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStat ement.execute(Unknown Source)
at ProcedimientoAlmacenado.callableDemo.Ingreso(calla bleDemo.java:91)
at Carga.MenuPrueba.<init>(MenuPrueba.java:48)
at Carga.Inicio.main(Inicio.java:13)


Me ataja las excepciones, pero me bota del programa.

Qué hago???