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

#6 jeastman - Hotmail
26/10/2007 - 17:53 | Informe spam
Que tal Alejando.

Sino entendí mal, ese cursor no está seleccionando una fila al azar, está
haciendo un recorrido de todos los registros de la tabla, y está tomando
solo una columna, que según dijo Miguel al principio es la única columna que
tiene dicha tabla.

Saludos.

"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
#7 Víctor Rafael Bocanegra Arias
26/10/2007 - 17:54 | Informe spam
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
#8 Alejandro Mesa
26/10/2007 - 17:55 | Informe spam
Miguel,

Altera tu sp y pon una sentencia "" al principio seguida de
"RETURN 0" y chequea si se imprime la cadena. Si la cadena se imprime,
entonces la logica dentro del sp es la que esta fallando.


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
> >
> >
> >
> > |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
#9 Miguel
26/10/2007 - 18:00 | Informe spam
El hecho es que debo recorrer esa tabla (cuyo origen es un archivo palno txt)
que contiene una cadena de carateres, luego usando sp que menciono se hacen
calculos del contenido de esa cadena y luego se insert a una Tabla Final.

Ejm: cadena = '123,1000, , , ,gomez,torres,juan'

Que otra forma puedo usar??

"Alejandro Mesa" wrote:

Miguel,

Altera tu sp y pon una sentencia "" al principio seguida de
"RETURN 0" y chequea si se imprime la cadena. Si la cadena se imprime,
entonces la logica dentro del sp es la que esta fallando.


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
> > >
> > >
> > >
> > > |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
#10 Miguel
26/10/2007 - 18:02 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida