Ver Mensaje Individual
  #114  
Antiguo 14-11-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Reputación: 18
mightydragonlor Va por buen camino
Cita:
Empezado por cointec Ver Mensaje
Hola poliburro, lo que no entiendo es la frase "tienes que hacer todo ese código para devolver un resulset", cuando lo único que se tiene que escribir en el cuerpo del procedimiento almacenado si deseas devolverlo como resultset es "suspend"

El resto de código es común y la lógica será la misma que en cualquier motor.

Por otro lado, cuando te pedía el ejemplo no era en la llamada al procedimiento, sino en que escribieses el cuerpo del procedimiento en sqlserver, mysql, etc. para poder comprobar a lo que te referias con "todo ese código".

Imagino que en los motores que comentas, tendrás que declarar la estructura del resultset, con campos y tipos, que es equivalente a los parámetros de retorno del procedimiento almacenado. Dentro del procedimiento, tendrás que introducir los datos en variables e insertarlos en el resultset, para poder posteriormente devolverlos y por último devolver una referencia al resultset. Desde tu aplicación cliente tendrás una llamada al procedimiento almacenado y posteriormente otra llamada para obtener los datos insertados en el resultset.

En firebird, la sencillez es que la llamada al procedimiento ya es un resultset. Quizá con ejemplos sería mejor, por lo que sí nos pones algún ejemplo en otros motores, te podríamos mostrar su traducción a firebird y podríamos comparar cosas y no utilizar frases genéricas que creo no tienen sentido.
En MsSql no necesitas declarar los resulsets de salida, sólo con que tengas varios Select * from tabla serán retornados sin problemas, para el caso de oracle se declaran cursores de salida, y los llenas con sus respectivos Select, cada uno deberá ser declarado para que pueda ser retornado, para el caso del actual firebird sólo devuelve un resulset con un select y un suspend, en Oracle es casi igual ya que sólo se devuelve por cada cursor que se llena, pero en MsSQL la cosa cambia, ya que no puedes usar los Select "libremente" hay que tener cuidado de no devolver lo que no se desea, pero para este caso se usa IF EXISTS(SELECT * FROM TABLA) o también puedes usar un SET @Variable = (SELECT * FROM TABLA) y con esto se evitar devilver lo que no se requiere.
PD: Si no estoy mal, para la versión 3 de Firebird que no está lejos de salir, se va a soportar la salida de varios cursores o resulsets en un procedimiento almacenado y en execute block, creo que también en funciones.

Saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita