SQL - Ejecución de cursores dinamicos.

 
Vista:

Ejecución de cursores dinamicos.

Publicado por Iván (1 intervención) el 27/12/2002 11:41:02
Hola a todos.

Se me ha planteado la siguiente duda :
Estoy creando un procedimiento almacenado en sql server 2000, dentro de este procedimiento creo una sql de forma dinámica a través de concatenación de cadenas de texto. Ahora necesito recorrer los resultados que me devuelve esa SQL, para lo que quiero crear un CURSOR, pero el cursor no me admite como sentencia select, esa select que tengo creada y guardada en una variable de tipo texto.

¿Alguien sabe como puedo crear un cursor en el que la select sea una cadena de texto contenida en una variable varchar, nvarchar o similar?

Un Saludo Iván. Muchas gracias por vuestra atención.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ejecución de cursores dinamicos.

Publicado por EDELRIO (540 intervenciones) el 27/12/2002 16:48:55
Bueno para eso es el fetch....Debe declarar variables que debera incluir dentro del fetch para irlas recorriendo dentro del cursor y que asi sea dinamica.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ejecución de cursores dinamicos.

Publicado por Isaías Islas (5072 intervenciones) el 27/12/2002 22:26:21
Eso mismo intente hacer yo mismo hace un tiempo, sin tener resultados satisfactorios, al parecer, lo unico que NO se puede crear mediante sentencias DINAMICAS son los cursores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ejecución de cursores dinamicos.

Publicado por smokalot (23 intervenciones) el 24/03/2009 10:34:56
Isaias ... mirate esto anda ;O

http://www.devjoker.com/asp/ver_contenidos.aspx?co_contenido=66

Cursores con SQL dinámico

Con SQL dinámico también podemos utilizar cursores.

Para utilizar un cursor implicito solo debemos construir nuestra sentencia SELECT en una variable de tipo caracter y ejecutarla con EXECUTE IMMEDIATE utilizando la palabra clave INTO.

DECLARE str_sql VARCHAR2(255); l_cnt VARCHAR2(20);BEGIN str_sql := 'SELECT count(*) FROM PAISES'; EXECUTE IMMEDIATE str_sql INTO l_cnt; dbms_output.put_line(l_cnt);END;


Trabajar con cursores explicitos es también muy fácil. Únicamente destacar el uso de REF CURSOR para declarar una variable para referirnos al cursor generado con SQL dinamico.

DECLARE TYPE CUR_TYP IS REF CURSOR; c_cursor CUR_TYP; fila PAISES%ROWTYPE; v_query VARCHAR2(255);BEGIN v_query := 'SELECT * FROM PAISES'; OPEN c_cursor FOR v_query; LOOP FETCH c_cursor INTO fila; EXIT WHEN c_cursor%NOTFOUND; dbms_output.put_line(fila.DESCRIPCION); END LOOP; CLOSE c_cursor;END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ejecución de cursores dinamicos.

Publicado por smokalot (23 intervenciones) el 24/03/2009 10:47:45
creo ke lo de antes es únicamente para ORACLE ... xo esto si que sirve para SQL Server.

DECLARE @cSQL_CURSOR AS VARCHAR(1000)

SET @cSQL_CURSOR = 'DECLARE @cFIELD_DETAIL_ID AS INT
DECLARE FIELDS_CURSOR CURSOR FOR
SELECT FIELD_DETAIL_ID
FROM FIELDS
WHERE REF_FIELD>= 0 AND INTERFACE_ID = 16 AND INTERFACE_TYPE_ID=10

OPEN FIELDS_CURSOR
FETCH NEXT FROM FIELDS_CURSOR
INTO @cFIELD_DETAIL_ID

WHILE @@FETCH_STATUS = 0
BEGIN
select @cFIELD_DETAIL_ID
END
FETCH NEXT FROM FIELDS_CURSOR
INTO @cFIELD_DETAIL_ID'
EXEC (@cSQL_CURSOR)

============================
Apa!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar