Oracle - Cursores

 
Vista:

Cursores

Publicado por Xabi (2 intervenciones) el 04/04/2006 10:16:09
Hola!

En todos los procedimientos almacenados que me devuelve una seleccion multiple de datos, utilizo un cursor como parametro para obtener estos datos desde .Net (para llenar los datasets). Mi problema es que en algunos de estos procedimientos almacenados la consulta esta especificada en una cadena de texto.

La idea era la siguiente, crear un procedimiento almacenado que me ejecute esta cadena de texto y me devuelva los datos en un Cursor también pasado por parametro.

CREATE OR REPLACE PROCEDURE EXEC_SQL
(cadena IN VARCHAR2 ,RC1 IN OUT Omwb_emulation.globalPkg.RCT1) AS
BEGIN

'Aqui es donde me gustaria abrir el cursor utilizando la variable cadena
'por lo que se (q no es mucho) los cursores solo se pueden abrir estaticamente, asi q me gustaria 'saber si hay alguna forma de lanzar la consulta de la variable "cadena" y obtener los datos en el ' 'cursor RC1

END;

Muchas gracias.

Un saludo!
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:Cursores

Publicado por Dave (16 intervenciones) el 04/04/2006 23:24:20
amigo, debe utilizar dbms_sql, para poder recibir la sentencia SQL, hacerle el respectivo parse y tomar los datos.

Exitos.
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:Cursores

Publicado por Xabi (2 intervenciones) el 05/04/2006 00:08:41
Muchas gracias.

Esa es la solucion que habia encontrado por internet. Sin embargo, por lo que he visto, a traves del dbms_sql no tengo el cursor sino una referencia al mismo (esto no se si es asi, lo he supuesto porque como cursor esta tomando un entero (no soy ningun experto en Oracle asi q me puedo estar equivocando tranquilamente)) Por lo tanto tendría que pasar los datos de esa referencia al cursor que paso por parametro. El problema viene en que para poder hacer la fetch sobre la referencia (por los ejemplos que he visto) deberia de conocer las columnas que me devuelve la consulta, por tanto no me valia para solucionar el problema ya que es un procedimiento almacenado general en el que se desconoce lo que se va a devolver.

De todas formas he encontrado una solucion!, la explico por si a alguien le vale. Simplemente en la declaracion del cursor dentro del paquete, debo declararlo como Ref Cursor (omitiendo la parte de la sentencia select). No se exactamente la diferencia entre un Cursor declarado de esta forma y uno normal, pero al hacer la open de dicho cursor se me permite realizar:

Open RC1 For Cadena;

Con esto obtengo los datos dependiendo de el string almacenado en la variable "Cadena"

Son las mil de la noche y estoy escribiendo el codigo de memoria, mañana le echare un vistazo por si me he podido colar al escribirlo.

De todas formas, mil gracias por molestarse en contestar.

Un saludo!
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