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

Procesos Almacenados Consultas Varios Registros

Estas en el tema de Procesos Almacenados Consultas Varios Registros en el foro de Mysql en Foros del Web. Hola buenas Tardes, tengo una consulta miren tengo un Procedure en la que hago una consulta a la tabla PACIENTES de mi BD, donde le ...
  #1 (permalink)  
Antiguo 30/07/2012, 13:35
Avatar de youangelazul  
Fecha de Ingreso: julio-2012
Ubicación: Ancash, Huarmey
Mensajes: 18
Antigüedad: 11 años, 8 meses
Puntos: 3
Mensaje Procesos Almacenados Consultas Varios Registros

Hola buenas Tardes, tengo una consulta miren tengo un Procedure en la que hago una consulta a la tabla PACIENTES de mi BD, donde le di como parametros 2 de entrada y 7 de salida, buena esta consulta me coge bien cuando ingreso un dato respecto con cualquier dato en pConsult_cod_paciente y un dato vacio en pConsult_nom_paciente, siendo pConsult_cod_paciente la comparacion con un campo PRIMARY KEY p.cod_paciente de mi BD en el que logicamente en mi BD solo existira un registro con un unico codigo, el error que tengo es cuando las cosas se hace inversamente cuando intento consultar dando un valor a cualquiera a pConsult_nom_paciente y un valor vacio a pConsult_nom_paciente, resulta que pConsult_nom_paciente hace una comparacion con un campo normal p.nom_paciente que almacena los nombres de los pacientes pero me ocurre el error cuando en mi BD existen mas de dos registro con el mismo nombre de pacientes votandome un error "Result consisted of more than one row" o sea el resultado consiste de mas de un registro, oz pido que me ayuden como puedo hacer que me pueda mostrar todos los datos de mi campo nombrePaciente haci tenga muchos registros con el mismo nombres y estos datos se almacenen dentro de las variables que he creado como OUT, es una pequeña conexion la cual estoy elaborandola desde JAVA. espero me puedan dar una manito Graciias ;).

-- Este es Mi Procedure
ELIMITER $$

DROP PROCEDURE IF EXISTS `consultarPaciente` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `consultarPaciente`(
IN pConsult_cod_paciente CHAR(4),
IN pConsult_nom_paciente VARCHAR(45),
OUT p_cod_paciente CHAR(4),
OUT p_nom_paciente VARCHAR(45),
OUT p_ape_paciente VARCHAR(45),
OUT p_fna_paciente DATE,
OUT p_sex_paciente VARCHAR(45),
OUT p_dir_paciente VARCHAR(45),
OUT p_tel_paciente CHAR(9)
)
BEGIN

SELECT p.cod_paciente, p.nom_paciente, p.ape_paciente, p.fna_paciente, p.sex_paciente, p.dir_paciente, p.tel_paciente
INTO p_cod_paciente, p_nom_paciente, p_ape_paciente, p_fna_paciente, p_sex_paciente, p_dir_paciente, p_tel_paciente
FROM paciente as p
WHERE
p.cod_paciente = pConsult_cod_paciente OR
p.nom_paciente = pConsult_nom_paciente;

END $$

DELIMITER ;

-- Una pequeña consulta suponiendo que en la BD existen mas registros con el name "ROSARIO"
CALL consultarPaciente('','rosario',@codPaciente,@nomPa ciente,@apePaciente,@fnaPaciente,@sexPaciente,@dir Paciente,@telPaciente);

Atte. YouAnGelAzul
  #2 (permalink)  
Antiguo 30/07/2012, 15:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Procesos Almacenados Consultas Varios Registros

Hola youangelazul:

El error es claro, cuando intentas asignar el resultado de una consulta a una variable DEBES ASEGURARTE QUE EL NÚMERO DE REGISTROS RESULTANTES ES UNO.

Una de las maneras en que podrías "Arreglar esto" sería agregar un LIMIT 1 al final de tu consulta... de esta manera, aunque existan más de un registro, la consulta sólo regresará el primer registro que encuentre...

Ahora bien, si lo que pretendes hacer es que te regrese todas las apariciones de un nombre, NO LO PUEDES HACER CON VARIABLES, ya que el concepto de arreglos no existe en MySQL... podrías optar por no utilizar variables de salida y simplemente regresar el resultado del SELECT, es decir tendrías que quitar la parte del INTO... y dejar simplemente

Código MySQL:
Ver original
  1.   p.cod_paciente, p.nom_paciente, p.ape_paciente, p.fna_paciente,
  2.   p.sex_paciente, p.dir_paciente, p.tel_paciente
  3. FROM paciente as p
  4.   p.cod_paciente = pConsult_cod_paciente OR
  5.   p.nom_paciente = pConsult_nom_paciente;

De esta manera, sea un registro o N, no hay problema...

Saludos
Leo.
  #3 (permalink)  
Antiguo 31/07/2012, 09:28
Avatar de youangelazul  
Fecha de Ingreso: julio-2012
Ubicación: Ancash, Huarmey
Mensajes: 18
Antigüedad: 11 años, 8 meses
Puntos: 3
Pregunta Respuesta: Procesos Almacenados Consultas Varios Registros

Hola Leonardo Jose.

Me fue de mucha ayuda tu aclaracion sobre la no existencia de Arrays en MySQL, de ese modo si lo intente, pero te contare mi problema que se forma utilizando el metodo que me distes es como yo puedo mostrar los datos que me encuentra el select mediante JAVA, puesto a que en MySQL se hace facil solo ejecutas el Call del procedimientos y los registros te muestran, pero en JAVA no encuentro la forma estoy utilizando un CallableStatement cs = conn.prepareCall("{CALL consultarPaciente(?,?,?,?,?,?,?,?,?)}"); en java quiero que me lo muestre pero utilizando procesos almacenados ps las consultas simples si las se... espero me puedas ayudar o bueno algo Gracias de ante mano...
  #4 (permalink)  
Antiguo 31/07/2012, 12:38
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Procesos Almacenados Consultas Varios Registros

Hola de nuevo youangelazul:

Esta sería una pregunta para el foro de JAVA, no para el foro de MySQL... te sugiero que publiques tu pregunta en este foro:

http://www.forosdelweb.com/f45/

Estoy seguro que ahí, los expertos, podrán decirte cómo puedes invocar el SP desde JAVA.

Saludos
Leo.

Etiquetas: procedimientos, store_procedure
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:55.