04/10/2011, 09:48
|
| | Fecha de Ingreso: septiembre-2011
Mensajes: 40
Antigüedad: 13 años, 2 meses Puntos: 0 | |
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??? |