Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-10-2015
banthas banthas is offline
Miembro
NULL
 
Registrado: oct 2015
Posts: 26
Poder: 0
banthas Va por buen camino
les comento que tras mucho pelear logre sacar lo que queria con un pequeño defecto las columnas me salen unidas es por el type verdad?

Código Delphi [-]
CREATE OR REPLACE FUNCTION consulta2(nom text, curso text,gestion int) RETURNS setof prueba AS 
$BODY$

DECLARE
    r prueba%ROWTYPE;
    sql text;
BEGIN
sql := 'SELECT alumno.nombre,alumno.gestion,alumno.curso,operador.detalle,count(*) as total FROM alumno
inner join operador on alumno.id_operador=operador.id_operador
 WHERE 1=1 ';
 IF nom <>0 THEN sql := sql || ' AND alumno.nombre in('||nom||')'; END IF;
 IF curso <>0 THEN sql := sql || ' AND alumno.curso in('||curso||')'; END IF;
 IF gestion <>0 THEN sql := sql || ' AND alumno.gestion in('||gestion||')'; END IF;

 
sql:=sql || 'GROUP BY alumno.nombre,alumno.gestion,alumno.curso,operador.detalle';

for r in execute sql loop
    return next r;
end loop;

end;
$BODY$

LANGUAGE plpgsql VOLATILE
COST 100;

bueno lo que quiero saber ahora es si puedo dividirlas despues de crearlas o que me aconcejan??

muchas gracias por la ayuda !
Responder Con Cita
  #2  
Antiguo 23-10-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Roman muy interesante tu propuesta, nunca se me ocurrió encararlo así. En realidad nunca queme muchas neuronas en esto, prefiero ser más práctico y meter sql mas a lo bestia y no armarlo en forma dinámica, sólo por simpleza

Ya veré si hago algo más sofisticado en mi próximo emprendimiento, por el momento estoy haciendo todo con clases no persistentes, pero el sistema va tomando forma y puedo hacer test sin ningún problema. Ya cuando este todo terminado haré la parte de persistencia.
Responder Con Cita
  #3  
Antiguo 23-10-2015
banthas banthas is offline
Miembro
NULL
 
Registrado: oct 2015
Posts: 26
Poder: 0
banthas Va por buen camino
Bueno siquiera de algo le servira a alguien espero... pero sigo con la duda por fa como podria obtener el resultado en columnas?
Responder Con Cita
  #4  
Antiguo 23-10-2015
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.912
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Ah ya te entendi!

El problema es que le diste "setof" como tipo de retorno y eso significa que te retorna una TUPLA, no registros. A proposito, es redundante que hagas ese FOR.

Checa bien los DOCS de como hacer las funciones en postgresql. PG tiene un muy amplio abanico de caracteristicas que hacen que sea muy potente y flexible pero por otro lado hay que leer un poco porque si vienes por ejemplo, de MySql, puede no ser tan obvio como mapear las cosas...
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 26-10-2015
banthas banthas is offline
Miembro
NULL
 
Registrado: oct 2015
Posts: 26
Poder: 0
banthas Va por buen camino
estimado mamcx segui tu concejo y busque en la documentacion pero no entiendo como hacer que me retorne las columnas de mi consulta lo hice tal cual indica

Código Delphi [-]
CREATE OR REPLACE FUNCTION consulta2(
    nombre text,
    curso text,
    gestion  int,
)
  RETURNS table (nombre text, gestion int, curso text, operador text, total int) AS
$$

DECLARE
 
    sql text;
BEGIN
sql := 'SELECT alumno.nombre as nombre,alumno.gestion as gestion,alumno.curso as curso,operador.detalle as operador,count(*) as total FROM alumno
inner join operador on alumno.id_operador=operador.id_operador
 WHERE 1=1 ';
 IF nom <>0 THEN sql := sql || ' AND alumno.nombre in('||nom||')'; END IF;
 IF curso <>0 THEN sql := sql || ' AND alumno.curso in('||curso||')'; END IF;
 IF gestion <>0 THEN sql := sql || ' AND alumno.gestion in('||gestion||')'; END IF;

 
sql:=sql || 'GROUP BY alumno.nombre,alumno.gestion,alumno.curso,operador.detalle';
execute sql;
end;
$$
  LANGUAGE plpgsql;

me devuelve las columnas en blanco


por fa alguna sugerencia

Última edición por banthas fecha: 26-10-2015 a las 03:53:13. Razón: pequeño error
Responder Con Cita
  #6  
Antiguo 26-10-2015
banthas banthas is offline
Miembro
NULL
 
Registrado: oct 2015
Posts: 26
Poder: 0
banthas Va por buen camino
Je ya encontre la solucion creo que me sirvio simplemente preguntar y ya solito me respondi
Dejo el codigo talvez a alguien le sirva

Código Delphi [-]

CREATE OR REPLACE FUNCTION consulta2(
    nombre text,
    curso text,
    gestion  int,
)
  RETURNS table (nombre text, gestion int, curso text, operador text, total int) AS
$$

DECLARE
 
    sql text;
BEGIN
sql := 'SELECT alumno.nombre as nombre,alumno.gestion as gestion,alumno.curso as curso,operador.detalle as operador,count(*) as total FROM alumno
inner join operador on alumno.id_operador=operador.id_operador
 WHERE 1=1 ';
 IF nombre <>0 THEN sql := sql || ' AND alumno.nombre in('||nombre||')'; END IF;
 IF curso <>0 THEN sql := sql || ' AND alumno.curso in('||curso||')'; END IF;
 IF gestion <>0 THEN sql := sql || ' AND alumno.gestion in('||gestion||')'; END IF;

 
sql:=sql || 'GROUP BY alumno.nombre,alumno.gestion,alumno.curso,operador.detalle';

for var in execute sql loop
nombre:= var.nombre
curso:= var.curso;
 gestion:=var.gestion;
 operador:=var.operador;
 total:=var.total;
 return next;
end loop;
end;
$$
  LANGUAGE plpgsql;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como construir un IDE? JXJ Varios 11 12-01-2009 22:59:36
Construir Manual SQL GustavoCruz SQL 1 30-05-2008 18:36:41
Problema al Construir un TRegistry D-MO Varios 3 24-08-2006 19:55:33
Construir un KEYLOGGER SPARROW Varios 3 18-02-2004 14:27:00
Error al construir el .EXE ADN Varios 8 24-07-2003 12:49:22


La franja horaria es GMT +2. Ahora son las 04:35:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi