Miguel

26/10/2007 - 17:08 por Miguel | Informe spam
Hola a todos, tengo una consulta sobre cursores.

El caso es:
- Tengo una tabla con un unico campo que es un varchar(400)
- Creo un Cursor con los datos de esta Tabla
- Recorro el cursor y tomo el campo como variable
- Ejecuto un SP dentro de las sentencias BEGIN..END

El caso es que en el SP que ejecuto realizo un INSERT a otra tabla con los
datos de la cadena, pero dentro del cursor no funciona e inserta solo valores
nulos. Pero si usao el SP en el Analizador de Consultas si lo realiza
normalmente.
Adjunto el codigo para mayor detalle.



DECLARE @cadena varchar(400)

DECLARE cur_rcc CURSOR GLOBAL FOR

SELECT cadena FROM texto

OPEN cur_rcc

FETCH NEXT FROM cur_rcc

INTO @cadena



WHILE @@FETCH_STATUS = 0

BEGIN



|001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'

EXECUTE SP_02 @cadena



FETCH NEXT FROM cur_rcc

INTO @cadena

END



CLOSE cur_rcc

DEALLOCATE cur_rcc



Si ejecuto EXECUTE SP_02 cadenatexto Si lo ejecuta pero no dentro del cursor

Preguntas similare

Leer las respuestas

#11 jeastman - Hotmail
26/10/2007 - 18:41 | Informe spam
Miguel, estoy revisando, ya te doy una respuesta.

"Miguel" escribió en el mensaje
news:
Te adjunto el Sp interno:
el paremetro a enviar el algo asi como '1|0071981991|20070831|
||1|40513530|1|
|001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
que es el contenido de cada linea de la Tabla Texto

CREATE PROCEDURE Uri_MCA01_Sp

@Lista Varchar(400)

AS


BEGIN

SET NOCOUNT ON
Declare @Separador nchar(1)
Set @Separador = '|'

declare @Tabla TABLE (Campo nvarchar(400))

Declare @Ancho int, @PuntoCorte Int
Set @Ancho = Len(@Lista)
While @Ancho <> 0
Begin
Select @PuntoCorte = Charindex(@Separador, @Lista)
If @PuntoCorte > 0
Begin
Insert Into @Tabla(Campo) Values (ltrim(Substring(@Lista,
1,@PuntoCorte - 1))) --inserta a tabla
Select @Lista = ltrim(Right(@Lista, @Ancho - @PuntoCorte)),
@Ancho= Len(@Lista) --nuevo ancho
End
Else
Begin
Insert Into @Tabla(Campo) Values (@Lista) -- ultimo campo
Set @Ancho = 0
End
End



declare @nconta tinyint
declare @xxx char(50)
declare @campo1 CHAR(1),@campo2 CHAR(10),@campo3 CHAR(8),@campo4
CHAR(1),@campo5 CHAR(11),@campo6 CHAR(1),
@campo7 CHAR(12),@campo8 CHAR(1),@campo9 CHAR(1),@campo10 TINYINT,@campo11
NUMERIC(7,2),
@campo12 NUMERIC(7,2),@campo13 NUMERIC(7,2),@campo14 NUMERIC(7,2),@campo15
NUMERIC(7,2),
@campo16 CHAR(120),@campo17 CHAR(40),@campo18 CHAR(40),@campo19
CHAR(40),@campo20 CHAR(40)



set @nconta = 1

DECLARE ccc CURSOR
FOR
SELECT campo
FROM @Tabla
OPEN ccc
FETCH NEXT FROM ccc INTO @xxx
WHILE (@@FETCH_STATUS = 0)
BEGIN

IF @nconta = 1
set @campo1 = @xxx
IF @nconta = 2
set @campo2 = @xxx
IF @nconta = 3
set @campo3 = @xxx
IF @nconta = 4
set @campo4 = @xxx
IF @nconta = 5
set @campo5 = @xxx
IF @nconta = 6
set @campo6 = @xxx
IF @nconta = 7
set @campo7 = @xxx
IF @nconta = 8
set @campo8 = @xxx
IF @nconta = 9
set @campo9 = @xxx
IF @nconta = 10
set @campo10 = @xxx


IF @nconta = 11
set @campo11 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 12
set @campo12 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 13
set @campo13 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 14
set @campo14 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 15
set @campo15 = cast(@xxx/100 as NUMERIC(7,2))

IF @nconta = 16
set @campo16 = @xxx
IF @nconta = 17
set @campo17 = @xxx
IF @nconta = 18
set @campo18 = @xxx
IF @nconta = 19
set @campo19 = @xxx
IF @nconta = 20
set @campo20 = @xxx

set @nconta = @nconta + 1



FETCH NEXT FROM ccc INTO @xxx
END


Insert Into URIRCCMAE808 Values
(@campo1,@campo2,@campo3,@campo4,@campo5,@campo6,@campo7,@campo8,@campo9,@campo10,

@campo11,@campo12,@campo13,@campo14,@campo15,@campo16,@campo17,@campo18,@campo19,
@campo20,'')



CLOSE ccc
DEALLOCATE ccc







END
GO




"jeastman - Hotmail" wrote:

Sino es demaciado pedirte, pasar el sp que se está llamando, y si puedes
la
tabla texto con sus datos para hacer la prueba.

Saludos

"Miguel" escribió en el mensaje
news:
> He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
> pero al final no lo realiza.
>
> la tabla no tiene valores Nulos
>
> "jeastman - Hotmail" wrote:
>
>> Hola Miguel...
>>
>> Te sugiero que pongas un "print @cadena" justo antes de llamar el SP
>> para
>> ver el contenido de la variable, aparentemente no existe ingún
>> problema.
>>
>> Una vez que hagas la prueba nos comentas para ver en que te podemos
>> ayudar.
>>
>> También revisa el tipo de datos del parámetro dentro del cursor.
>>
>> y por último te sugiero que revises el contenido de la tabla donde
>> están
>> las
>> cadenas para estár seguro que no tienes valores nulos
>>
>> select cadena from text where cadena is null
>>
>> si éste te regresa algún registro, empieza por ahi.
>>
>>
>> Saludos.
>>
>> "Miguel" escribió en el mensaje
>> news:
>> > Hola a todos, tengo una consulta sobre cursores.
>> >
>> > El caso es:
>> > - Tengo una tabla con un unico campo que es un varchar(400)
>> > - Creo un Cursor con los datos de esta Tabla
>> > - Recorro el cursor y tomo el campo como variable
>> > - Ejecuto un SP dentro de las sentencias BEGIN..END
>> >
>> > El caso es que en el SP que ejecuto realizo un INSERT a otra tabla
>> > con
>> > los
>> > datos de la cadena, pero dentro del cursor no funciona e inserta
>> > solo
>> > valores
>> > nulos. Pero si usao el SP en el Analizador de Consultas si lo
>> > realiza
>> > normalmente.
>> > Adjunto el codigo para mayor detalle.
>> >
>> >
>> >
>> > DECLARE @cadena varchar(400)
>> >
>> > DECLARE cur_rcc CURSOR GLOBAL FOR
>> >
>> > SELECT cadena FROM texto
>> >
>> > OPEN cur_rcc
>> >
>> > FETCH NEXT FROM cur_rcc
>> >
>> > INTO @cadena
>> >
>> >
>> >
>> > WHILE @@FETCH_STATUS = 0
>> >
>> > BEGIN
>> >
>> >
>> >
>> > ||1|40513530|1|
>> > |001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
>> >
>> > EXECUTE SP_02 @cadena
>> >
>> >
>> >
>> > FETCH NEXT FROM cur_rcc
>> >
>> > INTO @cadena
>> >
>> > END
>> >
>> >
>> >
>> > CLOSE cur_rcc
>> >
>> > DEALLOCATE cur_rcc
>> >
>> >
>> >
>> > Si ejecuto EXECUTE SP_02 cadenatexto Si lo ejecuta pero no dentro
>> > del
>> > cursor
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#12 jeastman - Hotmail
26/10/2007 - 19:26 | Informe spam
Miguel, yo te propongo el SP que lo hagas de ésta forma, así te eliminas el
cursor que empleas dentro del SP, ahora, ésta propuesta es suponiendo que
todos los valores que pasas al SP tienen la misma estructura,

Observa la declaración y veras que modifiqué el tipo de valor del campo
(campo1) de char(1) a char(10), ya que el valor es de mayor longitud.

Aqui tienes mi propuesta, por favor revisala y cualquier cosa avisas para
ver en que te podemos ayudar.

==create proc Uri_MCA01_Sp
@Lista Varchar(400)
as

declare @campo1 CHAR(10),
@campo2 CHAR(10),
@campo3 CHAR(8),
@campo4 CHAR(1),
@campo5 CHAR(11),
@campo6 CHAR(1),
@campo7 CHAR(12),
@campo8 CHAR(1),
@campo9 CHAR(1),
@campo10 TINYINT,
@campo11 NUMERIC(7,2),
@campo12 NUMERIC(7,2),
@campo13 NUMERIC(7,2),
@campo14 NUMERIC(7,2),
@campo15 NUMERIC(7,2),
@campo16 CHAR(120),
@campo17 CHAR(40),
@campo18 CHAR(40),
@campo19 CHAR(40),
@campo20 CHAR(40)

set @campo1 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo2 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo3 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo4 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo5 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo6 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo7 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo8 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo9 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo10= left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo11 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo12 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo13 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo14 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo15 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo16 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo17 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo18 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo19 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo20 = @lista

select @campo1,
@campo2,
@campo3,
@campo4,
@campo5,
@campo6,
@campo7,
@campo8,
@campo9,
@campo10,
@campo11,
@campo12,
@campo13,
@campo14,
@campo15,
@campo16,
@campo17,
@campo18,
@campo19,
@campo20

Insert Into URIRCCMAE808 Values (
@campo1,
@campo2,
@campo3,
@campo4,
@campo5,
@campo6,
@campo7,
@campo8,
@campo9,
@campo10,
@campo11,
@campo12,
@campo13,
@campo14,
@campo15,
@campo16,
@campo17,
@campo18,
@campo19,
@campo20,
''
)

return 0
==
Saludos.

"Miguel" escribió en el mensaje
news:
Te adjunto el Sp interno:
el paremetro a enviar el algo asi como '1|0071981991|20070831|
||1|40513530|1|
|001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
que es el contenido de cada linea de la Tabla Texto

CREATE PROCEDURE Uri_MCA01_Sp

@Lista Varchar(400)

AS


BEGIN

SET NOCOUNT ON
Declare @Separador nchar(1)
Set @Separador = '|'

declare @Tabla TABLE (Campo nvarchar(400))

Declare @Ancho int, @PuntoCorte Int
Set @Ancho = Len(@Lista)
While @Ancho <> 0
Begin
Select @PuntoCorte = Charindex(@Separador, @Lista)
If @PuntoCorte > 0
Begin
Insert Into @Tabla(Campo) Values (ltrim(Substring(@Lista,
1,@PuntoCorte - 1))) --inserta a tabla
Select @Lista = ltrim(Right(@Lista, @Ancho - @PuntoCorte)),
@Ancho= Len(@Lista) --nuevo ancho
End
Else
Begin
Insert Into @Tabla(Campo) Values (@Lista) -- ultimo campo
Set @Ancho = 0
End
End



declare @nconta tinyint
declare @xxx char(50)
declare @campo1 CHAR(1),@campo2 CHAR(10),@campo3 CHAR(8),@campo4
CHAR(1),@campo5 CHAR(11),@campo6 CHAR(1),
@campo7 CHAR(12),@campo8 CHAR(1),@campo9 CHAR(1),@campo10 TINYINT,@campo11
NUMERIC(7,2),
@campo12 NUMERIC(7,2),@campo13 NUMERIC(7,2),@campo14 NUMERIC(7,2),@campo15
NUMERIC(7,2),
@campo16 CHAR(120),@campo17 CHAR(40),@campo18 CHAR(40),@campo19
CHAR(40),@campo20 CHAR(40)



set @nconta = 1

DECLARE ccc CURSOR
FOR
SELECT campo
FROM @Tabla
OPEN ccc
FETCH NEXT FROM ccc INTO @xxx
WHILE (@@FETCH_STATUS = 0)
BEGIN

IF @nconta = 1
set @campo1 = @xxx
IF @nconta = 2
set @campo2 = @xxx
IF @nconta = 3
set @campo3 = @xxx
IF @nconta = 4
set @campo4 = @xxx
IF @nconta = 5
set @campo5 = @xxx
IF @nconta = 6
set @campo6 = @xxx
IF @nconta = 7
set @campo7 = @xxx
IF @nconta = 8
set @campo8 = @xxx
IF @nconta = 9
set @campo9 = @xxx
IF @nconta = 10
set @campo10 = @xxx


IF @nconta = 11
set @campo11 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 12
set @campo12 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 13
set @campo13 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 14
set @campo14 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 15
set @campo15 = cast(@xxx/100 as NUMERIC(7,2))

IF @nconta = 16
set @campo16 = @xxx
IF @nconta = 17
set @campo17 = @xxx
IF @nconta = 18
set @campo18 = @xxx
IF @nconta = 19
set @campo19 = @xxx
IF @nconta = 20
set @campo20 = @xxx

set @nconta = @nconta + 1



FETCH NEXT FROM ccc INTO @xxx
END


Insert Into URIRCCMAE808 Values
(@campo1,@campo2,@campo3,@campo4,@campo5,@campo6,@campo7,@campo8,@campo9,@campo10,

@campo11,@campo12,@campo13,@campo14,@campo15,@campo16,@campo17,@campo18,@campo19,
@campo20,'')



CLOSE ccc
DEALLOCATE ccc







END
GO




"jeastman - Hotmail" wrote:

Sino es demaciado pedirte, pasar el sp que se está llamando, y si puedes
la
tabla texto con sus datos para hacer la prueba.

Saludos

"Miguel" escribió en el mensaje
news:
> He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
> pero al final no lo realiza.
>
> la tabla no tiene valores Nulos
>
> "jeastman - Hotmail" wrote:
>
>> Hola Miguel...
>>
>> Te sugiero que pongas un "print @cadena" justo antes de llamar el SP
>> para
>> ver el contenido de la variable, aparentemente no existe ingún
>> problema.
>>
>> Una vez que hagas la prueba nos comentas para ver en que te podemos
>> ayudar.
>>
>> También revisa el tipo de datos del parámetro dentro del cursor.
>>
>> y por último te sugiero que revises el contenido de la tabla donde
>> están
>> las
>> cadenas para estár seguro que no tienes valores nulos
>>
>> select cadena from text where cadena is null
>>
>> si éste te regresa algún registro, empieza por ahi.
>>
>>
>> Saludos.
>>
>> "Miguel" escribió en el mensaje
>> news:
>> > Hola a todos, tengo una consulta sobre cursores.
>> >
>> > El caso es:
>> > - Tengo una tabla con un unico campo que es un varchar(400)
>> > - Creo un Cursor con los datos de esta Tabla
>> > - Recorro el cursor y tomo el campo como variable
>> > - Ejecuto un SP dentro de las sentencias BEGIN..END
>> >
>> > El caso es que en el SP que ejecuto realizo un INSERT a otra tabla
>> > con
>> > los
>> > datos de la cadena, pero dentro del cursor no funciona e inserta
>> > solo
>> > valores
>> > nulos. Pero si usao el SP en el Analizador de Consultas si lo
>> > realiza
>> > normalmente.
>> > Adjunto el codigo para mayor detalle.
>> >
>> >
>> >
>> > DECLARE @cadena varchar(400)
>> >
>> > DECLARE cur_rcc CURSOR GLOBAL FOR
>> >
>> > SELECT cadena FROM texto
>> >
>> > OPEN cur_rcc
>> >
>> > FETCH NEXT FROM cur_rcc
>> >
>> > INTO @cadena
>> >
>> >
>> >
>> > WHILE @@FETCH_STATUS = 0
>> >
>> > BEGIN
>> >
>> >
>> >
>> > ||1|40513530|1|
>> > |001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
>> >
>> > EXECUTE SP_02 @cadena
>> >
>> >
>> >
>> > FETCH NEXT FROM cur_rcc
>> >
>> > INTO @cadena
>> >
>> > END
>> >
>> >
>> >
>> > CLOSE cur_rcc
>> >
>> > DEALLOCATE cur_rcc
>> >
>> >
>> >
>> > Si ejecuto EXECUTE SP_02 cadenatexto Si lo ejecuta pero no dentro
>> > del
>> > cursor
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#13 jeastman - Hotmail
26/10/2007 - 19:28 | Informe spam
Miguel, te propongo que revises que todos los registros de la tabla TEXTO
tengan la misma longitud y la misma estructura.

Saludos

"Miguel" escribió en el mensaje
news:
Te adjunto el Sp interno:
el paremetro a enviar el algo asi como '1|0071981991|20070831|
||1|40513530|1|
|001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
que es el contenido de cada linea de la Tabla Texto

CREATE PROCEDURE Uri_MCA01_Sp

@Lista Varchar(400)

AS


BEGIN

SET NOCOUNT ON
Declare @Separador nchar(1)
Set @Separador = '|'

declare @Tabla TABLE (Campo nvarchar(400))

Declare @Ancho int, @PuntoCorte Int
Set @Ancho = Len(@Lista)
While @Ancho <> 0
Begin
Select @PuntoCorte = Charindex(@Separador, @Lista)
If @PuntoCorte > 0
Begin
Insert Into @Tabla(Campo) Values (ltrim(Substring(@Lista,
1,@PuntoCorte - 1))) --inserta a tabla
Select @Lista = ltrim(Right(@Lista, @Ancho - @PuntoCorte)),
@Ancho= Len(@Lista) --nuevo ancho
End
Else
Begin
Insert Into @Tabla(Campo) Values (@Lista) -- ultimo campo
Set @Ancho = 0
End
End



declare @nconta tinyint
declare @xxx char(50)
declare @campo1 CHAR(1),@campo2 CHAR(10),@campo3 CHAR(8),@campo4
CHAR(1),@campo5 CHAR(11),@campo6 CHAR(1),
@campo7 CHAR(12),@campo8 CHAR(1),@campo9 CHAR(1),@campo10 TINYINT,@campo11
NUMERIC(7,2),
@campo12 NUMERIC(7,2),@campo13 NUMERIC(7,2),@campo14 NUMERIC(7,2),@campo15
NUMERIC(7,2),
@campo16 CHAR(120),@campo17 CHAR(40),@campo18 CHAR(40),@campo19
CHAR(40),@campo20 CHAR(40)



set @nconta = 1

DECLARE ccc CURSOR
FOR
SELECT campo
FROM @Tabla
OPEN ccc
FETCH NEXT FROM ccc INTO @xxx
WHILE (@@FETCH_STATUS = 0)
BEGIN

IF @nconta = 1
set @campo1 = @xxx
IF @nconta = 2
set @campo2 = @xxx
IF @nconta = 3
set @campo3 = @xxx
IF @nconta = 4
set @campo4 = @xxx
IF @nconta = 5
set @campo5 = @xxx
IF @nconta = 6
set @campo6 = @xxx
IF @nconta = 7
set @campo7 = @xxx
IF @nconta = 8
set @campo8 = @xxx
IF @nconta = 9
set @campo9 = @xxx
IF @nconta = 10
set @campo10 = @xxx


IF @nconta = 11
set @campo11 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 12
set @campo12 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 13
set @campo13 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 14
set @campo14 = cast(@xxx/100 as NUMERIC(7,2))
IF @nconta = 15
set @campo15 = cast(@xxx/100 as NUMERIC(7,2))

IF @nconta = 16
set @campo16 = @xxx
IF @nconta = 17
set @campo17 = @xxx
IF @nconta = 18
set @campo18 = @xxx
IF @nconta = 19
set @campo19 = @xxx
IF @nconta = 20
set @campo20 = @xxx

set @nconta = @nconta + 1



FETCH NEXT FROM ccc INTO @xxx
END


Insert Into URIRCCMAE808 Values
(@campo1,@campo2,@campo3,@campo4,@campo5,@campo6,@campo7,@campo8,@campo9,@campo10,

@campo11,@campo12,@campo13,@campo14,@campo15,@campo16,@campo17,@campo18,@campo19,
@campo20,'')



CLOSE ccc
DEALLOCATE ccc







END
GO




"jeastman - Hotmail" wrote:

Sino es demaciado pedirte, pasar el sp que se está llamando, y si puedes
la
tabla texto con sus datos para hacer la prueba.

Saludos

"Miguel" escribió en el mensaje
news:
> He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
> pero al final no lo realiza.
>
> la tabla no tiene valores Nulos
>
> "jeastman - Hotmail" wrote:
>
>> Hola Miguel...
>>
>> Te sugiero que pongas un "print @cadena" justo antes de llamar el SP
>> para
>> ver el contenido de la variable, aparentemente no existe ingún
>> problema.
>>
>> Una vez que hagas la prueba nos comentas para ver en que te podemos
>> ayudar.
>>
>> También revisa el tipo de datos del parámetro dentro del cursor.
>>
>> y por último te sugiero que revises el contenido de la tabla donde
>> están
>> las
>> cadenas para estár seguro que no tienes valores nulos
>>
>> select cadena from text where cadena is null
>>
>> si éste te regresa algún registro, empieza por ahi.
>>
>>
>> Saludos.
>>
>> "Miguel" escribió en el mensaje
>> news:
>> > Hola a todos, tengo una consulta sobre cursores.
>> >
>> > El caso es:
>> > - Tengo una tabla con un unico campo que es un varchar(400)
>> > - Creo un Cursor con los datos de esta Tabla
>> > - Recorro el cursor y tomo el campo como variable
>> > - Ejecuto un SP dentro de las sentencias BEGIN..END
>> >
>> > El caso es que en el SP que ejecuto realizo un INSERT a otra tabla
>> > con
>> > los
>> > datos de la cadena, pero dentro del cursor no funciona e inserta
>> > solo
>> > valores
>> > nulos. Pero si usao el SP en el Analizador de Consultas si lo
>> > realiza
>> > normalmente.
>> > Adjunto el codigo para mayor detalle.
>> >
>> >
>> >
>> > DECLARE @cadena varchar(400)
>> >
>> > DECLARE cur_rcc CURSOR GLOBAL FOR
>> >
>> > SELECT cadena FROM texto
>> >
>> > OPEN cur_rcc
>> >
>> > FETCH NEXT FROM cur_rcc
>> >
>> > INTO @cadena
>> >
>> >
>> >
>> > WHILE @@FETCH_STATUS = 0
>> >
>> > BEGIN
>> >
>> >
>> >
>> > ||1|40513530|1|
>> > |001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
>> >
>> > EXECUTE SP_02 @cadena
>> >
>> >
>> >
>> > FETCH NEXT FROM cur_rcc
>> >
>> > INTO @cadena
>> >
>> > END
>> >
>> >
>> >
>> > CLOSE cur_rcc
>> >
>> > DEALLOCATE cur_rcc
>> >
>> >
>> >
>> > Si ejecuto EXECUTE SP_02 cadenatexto Si lo ejecuta pero no dentro
>> > del
>> > cursor
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#14 Miguel
26/10/2007 - 19:46 | Informe spam
Muchas Gracias por u ayuda y tu tiempo

hare las pruebas respectivas

Gracias

"jeastman - Hotmail" wrote:

Miguel, yo te propongo el SP que lo hagas de ésta forma, así te eliminas el
cursor que empleas dentro del SP, ahora, ésta propuesta es suponiendo que
todos los valores que pasas al SP tienen la misma estructura,

Observa la declaración y veras que modifiqué el tipo de valor del campo
(campo1) de char(1) a char(10), ya que el valor es de mayor longitud.

Aqui tienes mi propuesta, por favor revisala y cualquier cosa avisas para
ver en que te podemos ayudar.

==> create proc Uri_MCA01_Sp
@Lista Varchar(400)
as

declare @campo1 CHAR(10),
@campo2 CHAR(10),
@campo3 CHAR(8),
@campo4 CHAR(1),
@campo5 CHAR(11),
@campo6 CHAR(1),
@campo7 CHAR(12),
@campo8 CHAR(1),
@campo9 CHAR(1),
@campo10 TINYINT,
@campo11 NUMERIC(7,2),
@campo12 NUMERIC(7,2),
@campo13 NUMERIC(7,2),
@campo14 NUMERIC(7,2),
@campo15 NUMERIC(7,2),
@campo16 CHAR(120),
@campo17 CHAR(40),
@campo18 CHAR(40),
@campo19 CHAR(40),
@campo20 CHAR(40)

set @campo1 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo2 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo3 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo4 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo5 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo6 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo7 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo8 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo9 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo10= left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo11 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo12 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo13 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo14 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo15 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo16 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo17 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo18 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo19 = left( @lista, charindex( '|', @lista ) - 1 )
set @lista = substring( @lista, charindex( '|', @lista ) + 1, len(
@lista ) )

set @campo20 = @lista

select @campo1,
@campo2,
@campo3,
@campo4,
@campo5,
@campo6,
@campo7,
@campo8,
@campo9,
@campo10,
@campo11,
@campo12,
@campo13,
@campo14,
@campo15,
@campo16,
@campo17,
@campo18,
@campo19,
@campo20

Insert Into URIRCCMAE808 Values (
@campo1,
@campo2,
@campo3,
@campo4,
@campo5,
@campo6,
@campo7,
@campo8,
@campo9,
@campo10,
@campo11,
@campo12,
@campo13,
@campo14,
@campo15,
@campo16,
@campo17,
@campo18,
@campo19,
@campo20,
''
)

return 0
==>
Saludos.

"Miguel" escribió en el mensaje
news:
> Te adjunto el Sp interno:
> el paremetro a enviar el algo asi como '1|0071981991|20070831|
> ||1|40513530|1|
> |001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
> que es el contenido de cada linea de la Tabla Texto
>
> CREATE PROCEDURE Uri_MCA01_Sp
>
> @Lista Varchar(400)
>
> AS
>
>
> BEGIN
>
> SET NOCOUNT ON
> Declare @Separador nchar(1)
> Set @Separador = '|'
>
> declare @Tabla TABLE (Campo nvarchar(400))
>
> Declare @Ancho int, @PuntoCorte Int
> Set @Ancho = Len(@Lista)
> While @Ancho <> 0
> Begin
> Select @PuntoCorte = Charindex(@Separador, @Lista)
> If @PuntoCorte > 0
> Begin
> Insert Into @Tabla(Campo) Values (ltrim(Substring(@Lista,
> 1,@PuntoCorte - 1))) --inserta a tabla
> Select @Lista = ltrim(Right(@Lista, @Ancho - @PuntoCorte)),
> @Ancho= Len(@Lista) --nuevo ancho
> End
> Else
> Begin
> Insert Into @Tabla(Campo) Values (@Lista) -- ultimo campo
> Set @Ancho = 0
> End
> End
>
>
>
> declare @nconta tinyint
> declare @xxx char(50)
> declare @campo1 CHAR(1),@campo2 CHAR(10),@campo3 CHAR(8),@campo4
> CHAR(1),@campo5 CHAR(11),@campo6 CHAR(1),
> @campo7 CHAR(12),@campo8 CHAR(1),@campo9 CHAR(1),@campo10 TINYINT,@campo11
> NUMERIC(7,2),
> @campo12 NUMERIC(7,2),@campo13 NUMERIC(7,2),@campo14 NUMERIC(7,2),@campo15
> NUMERIC(7,2),
> @campo16 CHAR(120),@campo17 CHAR(40),@campo18 CHAR(40),@campo19
> CHAR(40),@campo20 CHAR(40)
>
>
>
> set @nconta = 1
>
> DECLARE ccc CURSOR
> FOR
> SELECT campo
> FROM @Tabla
> OPEN ccc
> FETCH NEXT FROM ccc INTO @xxx
> WHILE (@@FETCH_STATUS = 0)
> BEGIN
>
> IF @nconta = 1
> set @campo1 = @xxx
> IF @nconta = 2
> set @campo2 = @xxx
> IF @nconta = 3
> set @campo3 = @xxx
> IF @nconta = 4
> set @campo4 = @xxx
> IF @nconta = 5
> set @campo5 = @xxx
> IF @nconta = 6
> set @campo6 = @xxx
> IF @nconta = 7
> set @campo7 = @xxx
> IF @nconta = 8
> set @campo8 = @xxx
> IF @nconta = 9
> set @campo9 = @xxx
> IF @nconta = 10
> set @campo10 = @xxx
>
>
> IF @nconta = 11
> set @campo11 = cast(@xxx/100 as NUMERIC(7,2))
> IF @nconta = 12
> set @campo12 = cast(@xxx/100 as NUMERIC(7,2))
> IF @nconta = 13
> set @campo13 = cast(@xxx/100 as NUMERIC(7,2))
> IF @nconta = 14
> set @campo14 = cast(@xxx/100 as NUMERIC(7,2))
> IF @nconta = 15
> set @campo15 = cast(@xxx/100 as NUMERIC(7,2))
>
> IF @nconta = 16
> set @campo16 = @xxx
> IF @nconta = 17
> set @campo17 = @xxx
> IF @nconta = 18
> set @campo18 = @xxx
> IF @nconta = 19
> set @campo19 = @xxx
> IF @nconta = 20
> set @campo20 = @xxx
>
> set @nconta = @nconta + 1
>
>
>
> FETCH NEXT FROM ccc INTO @xxx
> END
>
>
> Insert Into URIRCCMAE808 Values
> (@campo1,@campo2,@campo3,@campo4,@campo5,@campo6,@campo7,@campo8,@campo9,@campo10,
>
> @campo11,@campo12,@campo13,@campo14,@campo15,@campo16,@campo17,@campo18,@campo19,
> @campo20,'')
>
>
>
> CLOSE ccc
> DEALLOCATE ccc
>
>
Respuesta Responder a este mensaje
#15 Alejandro Mesa
26/10/2007 - 19:49 | Informe spam
Hola Victor,

Asi es, lo que dije no es correcto. Puedes leer el segundo mensaje posteado
por mi.

Saludos,
Alejandro Mesa

"Víctor Rafael Bocanegra Arias" wrote:

Alejandro, creo que te equivocas, no esta seleccionando una fila al azar,
sino solo una columna del conjunto de filas devueltas por el SELECT.
Dicho valor va a cambiar cada vez que realice un FETCH...

Creo que es la falta de uso de cursores... ;)

Salu2

PD: Miguel, estoy revisando tu problema :)

"Alejandro Mesa" escribió en el
mensaje news:
> Hila Miguel,
>
> Por que usas un cursor, si solo estas selccionando una unica fila al asar?
>
> Chequea la definicion de tu cursor.
>
>> > > DECLARE cur_rcc CURSOR GLOBAL FOR
>> > >
>> > > SELECT cadena FROM texto
>
> Si la tabla [texto] tiene mas de una fila, entonces estas seleccionado
> solo
> el valor de la columna de una unica fila al asar.
>
> Ejemplo:
>
> declare @t table (c1 int not null identity)
>
> insert into @t default values
> insert into @t default values
> insert into @t default values
>
> declare @i int
>
> select @i = c1 from @t
>
> select @i
> go
>
>
> AMB
>
> "Miguel" wrote:
>
>> He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
>> pero al final no lo realiza.
>>
>> la tabla no tiene valores Nulos
>>
>> "jeastman - Hotmail" wrote:
>>
>> > Hola Miguel...
>> >
>> > Te sugiero que pongas un "print @cadena" justo antes de llamar el SP
>> > para
>> > ver el contenido de la variable, aparentemente no existe ingún
>> > problema.
>> >
>> > Una vez que hagas la prueba nos comentas para ver en que te podemos
>> > ayudar.
>> >
>> > También revisa el tipo de datos del parámetro dentro del cursor.
>> >
>> > y por último te sugiero que revises el contenido de la tabla donde
>> > están las
>> > cadenas para estár seguro que no tienes valores nulos
>> >
>> > select cadena from text where cadena is null
>> >
>> > si éste te regresa algún registro, empieza por ahi.
>> >
>> >
>> > Saludos.
>> >
>> > "Miguel" escribió en el mensaje
>> > news:
>> > > Hola a todos, tengo una consulta sobre cursores.
>> > >
>> > > El caso es:
>> > > - Tengo una tabla con un unico campo que es un varchar(400)
>> > > - Creo un Cursor con los datos de esta Tabla
>> > > - Recorro el cursor y tomo el campo como variable
>> > > - Ejecuto un SP dentro de las sentencias BEGIN..END
>> > >
>> > > El caso es que en el SP que ejecuto realizo un INSERT a otra tabla
>> > > con los
>> > > datos de la cadena, pero dentro del cursor no funciona e inserta solo
>> > > valores
>> > > nulos. Pero si usao el SP en el Analizador de Consultas si lo
>> > > realiza
>> > > normalmente.
>> > > Adjunto el codigo para mayor detalle.
>> > >
>> > >
>> > >
>> > > DECLARE @cadena varchar(400)
>> > >
>> > > DECLARE cur_rcc CURSOR GLOBAL FOR
>> > >
>> > > SELECT cadena FROM texto
>> > >
>> > > OPEN cur_rcc
>> > >
>> > > FETCH NEXT FROM cur_rcc
>> > >
>> > > INTO @cadena
>> > >
>> > >
>> > >
>> > > WHILE @@FETCH_STATUS = 0
>> > >
>> > > BEGIN
>> > >
>> > >
>> > >
>> > > ||1|40513530|1|
>> > > |001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'
>> > >
>> > > EXECUTE SP_02 @cadena
>> > >
>> > >
>> > >
>> > > FETCH NEXT FROM cur_rcc
>> > >
>> > > INTO @cadena
>> > >
>> > > END
>> > >
>> > >
>> > >
>> > > CLOSE cur_rcc
>> > >
>> > > DEALLOCATE cur_rcc
>> > >
>> > >
>> > >
>> > > Si ejecuto EXECUTE SP_02 cadenatexto Si lo ejecuta pero no dentro
>> > > del
>> > > cursor
>> > >
>> >
>> >
>> >



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida