Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Excepciones en Procedimientos Almacenados

Estas en el tema de Excepciones en Procedimientos Almacenados en el foro de SQL Server en Foros del Web. Comunidad: Tengo un(os) procedimiento(s) almacenado(s), y necesito manejar errores en ellos: me explico. Necesito que el nombre y apellido no excedan entre los 2 y ...
  #1 (permalink)  
Antiguo 03/10/2011, 14:33
 
Fecha de Ingreso: septiembre-2011
Mensajes: 40
Antigüedad: 11 años, 2 meses
Puntos: 0
Pregunta Excepciones en Procedimientos Almacenados

Comunidad:

Tengo un(os) procedimiento(s) almacenado(s), y necesito manejar errores en ellos: me explico.

Necesito que el nombre y apellido no excedan entre los 2 y 30 caracteres. Necesito que me mande el error por consola (trabajo en el Eclipse de Java) al tratar de ingresar valores que no correspondan al rango.


Dejo mi procedimiento almacenado:


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ProcedAlmac_Persona]
@nombre varchar(30),
@apellido varchar(20),
@rut varchar(12)
AS
BEGIN
INSERT INTO
tbl_persona
VALUES (
@nombre,
@apellido,
@rut);
END


Necesito lo mismo con lo de ELIMINAR, ya que si el RUT (elimino por rut) no existiera, me mande un mensaje de error por la consola.

Necesito ayuda urgente, porfa!!!


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[ProcedAlmac_BorraPersona]
@rut varchar(12)
AS
BEGIN
DELETE
FROM tbl_persona
WHERE rut = @rut

END
  #2 (permalink)  
Antiguo 03/10/2011, 14:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 16 años, 3 meses
Puntos: 774
Respuesta: Excepciones en Procedimientos Almacenados

Ya probaste con los triggers, after insert in before delete????

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/10/2011, 15:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años, 4 meses
Puntos: 180
Respuesta: Excepciones en Procedimientos Almacenados

Yo no lo haria con los triggers, simplemente es validar el LEN() de la cadena y con un simple IF NOT EXISTS(), validar la existencia o no del rut.
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 04/10/2011, 09:48
 
Fecha de Ingreso: septiembre-2011
Mensajes: 40
Antigüedad: 11 años, 2 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???

Etiquetas: consola, java, server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:15.