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

hacer join en procedimiento almacenado

Estas en el tema de hacer join en procedimiento almacenado en el foro de PostgreSQL en Foros del Web. saludos amigos tengo la siguiente duda quiero hacer un join del tipo union segun yo es asi: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR ...
  #1 (permalink)  
Antiguo 11/11/2013, 20:39
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 11 años, 4 meses
Puntos: 0
Información hacer join en procedimiento almacenado

saludos amigos tengo la siguiente duda quiero hacer un join del tipo union segun yo es asi:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION obtener_nombres_turnos(IN id CHARACTER, IN fecha DATE, OUT out_nombres CHARACTER, OUT out_turnos characte)
  2.   RETURNS SETOF record AS
  3. $BODY$
  4. DECLARE
  5. datos record;  
  6.    BEGIN
  7.       FOR datos IN SELECT nombres FROM prestatario WHERE id_prestatario=id UNION SELECT turno FROM servicios WHERE id_prestatario=id AND (fecha>=fecha_inicio AND fecha<=fecha_termino) loop
  8.          out_nombres=datos.nombres;
  9.          out_turnos=datos.turnos;
  10.          RETURN NEXT;
  11.       END loop;
  12.       RETURN;
  13.    END;
  14.  $BODY$
  15.   LANGUAGE plpgsql

pero me marca que segun la variable turno no esta asignada a la variable datos, ¿que me sugieren hacer? quiero hacerlo asi para evitar tener que definir 2 procedimientos almacenados por separado ya que estos datos los utilizo en una aplicacion java
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #2 (permalink)  
Antiguo 12/11/2013, 07:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: hacer join en procedimiento almacenado

Cuando se trata de consultas UNION el nombre de la columna lo prcede la primera consulta.
En este caso datos.nombres será quien represente el valor de todos los resultados de la consulta.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 13/11/2013, 07:59
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: hacer join en procedimiento almacenado

haciendo algunos cambios en el procedimiento segun yo quedaria asi:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION obtener_nombres_turnos(IN id CHARACTER, IN fecha DATE, OUT out_nombres CHARACTER)
  2.   RETURNS SETOF CHARACTER AS
  3. $BODY$
  4.     DECLARE
  5.     datos record;  
  6.        BEGIN
  7.           FOR datos IN SELECT nombres FROM prestatario WHERE id_prestatario=id UNION SELECT turno FROM servicios WHERE id_prestatario=id AND (fecha>=fecha_inicio AND fecha<=fecha_termino) loop
  8.              out_nombres=datos.nombres;
  9.              RETURN NEXT;
  10.           END loop;
  11.           RETURN;
  12.        END;
  13.      $BODY$
  14.   LANGUAGE plpgsql

al ingresar los parametros si me devuelve los valores correctos pero no me los devuelve con un record set es decir en otros procedimientos almacenados de record set me devuelve los valores en esta forma:

victor manuel, vespertino

los valores separados por comas


pero en este me lo colocoa de la siguiente manera:

obtener_nombres_turnos
bpchar
---------------------------------------
1 |vespertino
---------------------------------------
2 |victor manuel
---------------------------------------

ignoro si al llamar al procedimiento almacenado asi me devuelva ambos valores (segun yo solo devuelve el primero) ya que en java al obtener el conjunto de valores que te comento yo les doy formato para despues separarlos y colocarlos en las lineas de codigo que se nesesiten que opinas????
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #4 (permalink)  
Antiguo 13/11/2013, 08:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: hacer join en procedimiento almacenado

Eso ya sería manejo desde el lenguaje de programación que estes empleando.
Por ejemplo en java, con un List, obtienes todos los valores. El metodo se llama getResultList o algo asi.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: almacenado, as, join, procedimiento
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 00:43.