Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Estas en el tema de Como consumir resultado de un procedimiento almacenado desde otro en Mysql en el foro de Mysql en Foros del Web. Estimados Todos: Muy buen día. El título de mi solicitud talvez no es muy explícita pero trataré de explicarlo en las siguientes líneas. Tengo un ...
  #1 (permalink)  
Antiguo 10/02/2015, 15:48
 
Fecha de Ingreso: febrero-2015
Mensajes: 8
Antigüedad: 9 años, 2 meses
Puntos: 0
Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Estimados Todos:

Muy buen día.

El título de mi solicitud talvez no es muy explícita pero trataré de explicarlo en las siguientes líneas.

Tengo un procedimiento almacenado en MySql que después de realizar varias operaciones devuelve el resultado de un comando select.

Este procedimiento almacenado trae la información que solicito para un informe y hasta allí todo bien.

Ahora necesito realizar un proceso el cual en una parte realizará los mismo procesos que ya hago en el procedimiento almacenado que anteriormente comento, entonces lo que necesito es lo siguiente:

- Ejecutar el procedimiento almacenado del informe desde un segundo procedimiento almacenado.
- En el segundo procedimiento almacenado recibir el resultado del select del primero.
- El resultado del select colocarlo en una tabla temporal creada en el segundo procedimiento almacenado.

Todo la anterior con el ánimo de reutilizar el código del primer procedimiento almacenado que funciona muy bien y así si tengo que ampliar el proceso por la razón que sea, solamente tengo que hacerlo en el primer procedimiento almacenado.

En espera que me puedan apoyar, muy agradecido.

Atte.

TheKillerGt
  #2 (permalink)  
Antiguo 10/02/2015, 15:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Por lo pronto, deberías leer el uso de la clausula PROCEDURE en el SELECT. Eso te puede orientar: http://dev.mysql.com/doc/refman/5.6/en/select.html
Cita:
A PROCEDURE clause names a procedure that should process the data in the result set. For an example, see Section 8.4.2.4, “Using PROCEDURE ANALYSE”, which describes ANALYSE, a procedure that can be used to obtain suggestions for optimal column data types that may help reduce table sizes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/02/2015, 16:11
 
Fecha de Ingreso: febrero-2015
Mensajes: 8
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Muy buena tarde.

He visto que has solucionado muchas dudas en este sitio y precisamente por eso decidí registrarme.

Me alegra que hayas contestado y me sorprende la rapidez.

Leí lo que me indicaste pero no logro comprender en que puede ayudarme.

Trataré de explicarme un poco mejor ya que probablemente mi explicación fue pobre y poco ilustrativa.

Tengo el procedimiento almacenado en mysql con nombre SP1 que realiza al final un select y eso devuelve, digamos:

select columnaa,columnab
from mitabla;

Ahora necesito que desde otro procedimiento almacenado digamos SP2 haga algo como lo siguiente:

create temporary table mitabla (campo1char(2),campo2 char(2));

insert into mitabla (campo1,campo2)
call sp1(); -- El resultado de SP1 necesito consumirlo desde SP2.

Se que la expresión que indiqué arriba es incomprensible para el lenguaje, pero es solo demostrativa, de lo que trato de hacer.

Te agradeceré que me apoyes con este asunto.

De antemano, muy agradecido,

Atte.

TheKillerGt
  #4 (permalink)  
Antiguo 10/02/2015, 16:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Vamos por parte:
- Las tablas TEMPORARY no sirven para hacer tareas entre SP, porque cada SP se ejecuta en un segmento de subproceso diferente, y las tablas de ese tipo solo existen en el que las crea.
- No puedes transferir bloques de datos entre SP en forma paramétrica, porque MySQL no tiene tipos de datos TABLE, ARRAY o RECORD. Esos tipos existen en otros DBMS, pero no en MySQL.
- Una solución funcional en MySQL sería crear tablas de tipo MEMORY (ENGINE=MEMORY), pero el resultado es incierto, porque si bien la estructura persiste, los datos se pierden entre conexiones.
- Otra solución, poco performante, es que generes una iteración con un CURSOR en el primero, y uses los datos obtenidos para realizar llamadas al segundo SP, un registro a la vez.

El link que te pongo era porque si en el primer SP usabas esa forma, con la clausula PROCEDURE, el segundo Sp tomaría como datos de entrada el resultado de esa select, para procesarlos, No lo he probado, por lo que no estoy seguro del resultado final, pero es un camino a analizar.

Finalmente, la duda principal es: ¿Ese segundo SP se usa desde multiples SP, o sólo será invocado desde este?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/02/2015, 16:38
 
Fecha de Ingreso: febrero-2015
Mensajes: 8
Antigüedad: 9 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Muy amable compañerito.

Tengo años de experiencia en un par de DBMS y en estas puedo hacer esto de varias formas, de allí que pensé que sería relativamente sencillo en MySql.

Estoy algo corto de tiempo y creo que decantaré por devolver un XML y consumirlo desde el segundo procedimiento almacenado, no deseaba hacer algo como esto pero creo que por mi desconocimiento actual y el tiempo será lo más viable.

Concuerdo que mi solicitud es algo atípica pero por cuestión de mantenimiento y sostenibilidad no me gusta tener varios procedimientos que hacen lo mismo.

Te agradezco mucho el apoyo.

Atte.

TheKillerGt
  #6 (permalink)  
Antiguo 10/02/2015, 16:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Cita:
Estoy algo corto de tiempo y creo que decantaré por devolver un XML y consumirlo desde el segundo procedimiento almacenado, no deseaba hacer algo como esto pero creo que por mi desconocimiento actual y el tiempo será lo más viable.
Bueno... eso requiere MySQL 5.5.x o superior. ¿Eso lo tienes claro, no?

http://dev.mysql.com/doc/refman/5.5/en/load-xml.html

Cita:
Tengo años de experiencia en un par de DBMS y en estas puedo hacer esto de varias formas, de allí que pensé que sería relativamente sencillo en MySql.
Si ya tienes experiencia en otros DBMS, ya te habrás dado cuenta que no existe un estándar de lenguaje procedural. Cada uno de ellos tiene sus ventajas y limitaciones.
Yo trabajo mucho con Oracle y algunas veces extraño ciertas capacidades de MySQL. Hay cosas que son mas simples y potentes en este último.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/02/2015, 12:36
 
Fecha de Ingreso: febrero-2015
Mensajes: 8
Antigüedad: 9 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Como consumir resultado de un procedimiento almacenado desde otro en Mysql

Muy buen día.

Efectivamente, lo de la capacidad de MySql con XML tengo claro que no puedo hacerlo con versiones anteriores, la que uso actualmente es 5.6.21.1 y ya que mi entorno es C# con arquitectura de N-Capas pues utilizo el XML para el envío de información de detalle hacia MySql y no me quejo, es eficiente a su manera.

Con lo de las DBM's que cada una tiene sus características particulares, lo entiendo ya que mi entorno nativo es Oracle y Sql Server (por más de 15 años) y entre ambas he podido realizar procedimientos almacenados, funciones, etc. en las que dado a la arquitectura, tecnología, estructura y sintaxis pues hay que hacer uso de las herramientas que soportan cada una pero en general no he carecido de similitudes de implementación relativamente sencilla entre ellas.

Soy nuevo en esta base de datos (MySql) (3 meses) y de allí que acudo a los que tienen más experiencia para no andar tratando de "inventar el hilo negro", he seguido este foro desde hace un par de meses y las respuestas que has dado en esta DBMS me han aportado ideas y soluciones, y sin menospreciar a los demás moderadores me he registrado precisamente buscando tu ayuda, la cual gratamente he recibido.

Ya he hecho mi proceso con XML y funciona muy bien, aun tengo ese "mal sabor de boca" de no haber podido realizarlo de otra forma, pero supongo que por el momento es lo que esta DBMS me puede proporcionar.

Seguiré el foro y trataré de aportar con ideas y soluciones así como también solicitando ayuda cada vez que encuentre algo que mi capacidad y conocimiento no me permita realizar.

De nuevo, te agradezco tus observaciones y sobre todo lo rápido de tu respuesta.


Atentamente,


TheKillerGt

Etiquetas: almacenado, bases-de-datos-general, consumir, procedimiento, resultado, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:50.