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

Problemas varios Select dentro de un mismo PL

Estas en el tema de Problemas varios Select dentro de un mismo PL en el foro de PostgreSQL en Foros del Web. Hola Gente del Foro quería explicar mi problema en estos momentos estoy trabajando Posgrest y PHP, resulta que tengo un PL en Postgres llamado “sp_buscar”, ...
  #1 (permalink)  
Antiguo 27/01/2008, 21:52
 
Fecha de Ingreso: marzo-2003
Mensajes: 524
Antigüedad: 21 años, 1 mes
Puntos: 2
Problemas varios Select dentro de un mismo PL

Hola Gente del Foro quería explicar mi problema en estos momentos estoy trabajando Posgrest y PHP, resulta que tengo un PL en Postgres llamado “sp_buscar”, Esta tiene un parámetro de entrada llamado “Tipo”, para hacerlo sencillo el Tipo me indica a que tabla se le hará consulta. Aquí esta el PL

Código PHP:
CREATE OR REPLACE FUNCTION sp_buscar (in varcharin int4RETURNS setof text AS
$BODY$
DECLARE
    
tipo            ALIAS FOR $1;
    
codigo          ALIAS FOR $2;
    
rbalagral       tb_clasificacion%ROWTYPE;
    
rbalagra2       tb_categoria%ROWTYPE;
BEGIN
    
if tipo 'A' then
        
FOR rbalagral IN (select from tb_clasificacion)
            
LOOP
                
return next rbalagral;
            
END LOOP;
        
        
    
end if;
    if 
tipo 'B' then
        
FOR rbalagra2 IN (select from tb_categoria where id_clasificacion codigo)
            
LOOP
                
return next rbalagra2;            
            
END LOOP;
   
    
end if; 
END;
$BODY
Yo desdé php ejecuto el PL de la siguiente forma “Select * from sp_buscar(‘A’, 0);”, en este caso siguiendo el Flujo Tipo recoge una A y dentro del PL le ara una consulta a la tabla tb_Clasificacion si ejecuto solo el (select * from tb_clasificacion) me devuelve
Código PHP:
id_clasi     cod_clasi     desc_clasi        
 
-----------  ------------  ----------------- 
 
2            2             Pagina de Diseño  
 3            3             Pagina de Hacking 
 1            2             Hacking 
Ahora aquí va mi problema cuando ejecuto el PL (sp_ayuda) me devuelve esto

Código PHP:
sp_buscar                 
 
------------------------- 
 (
2,2,"Pagina de Diseño")  
 (
3,3,"Pagina de Hacking"
 (
1,2,Hacking
Entonces cuando PHP me despliega el resultado de los registro. Por ejemplo en primer registro (2,2,"Pagina de Diseño") están concatenados. Como puedo hacer yo desde PL dentro del que me devuelva los valores de los registros sin concatenar
  #2 (permalink)  
Antiguo 28/01/2008, 04:52
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: Problemas varios Select dentro de un mismo PL

El problema es que retornas texto, cambia el tipo de retorno a SETOF RECORD y devuelves un registro. (al ser dos tipos distintos yo mejor utilizaria una variable RECORD)

Luego a la hora de llamar a la funcion hazlo asi:
select * from sp_buscar(‘A’, 0) alias (id_clasi integer, cod_clasi integer, desc_clasi varchar);
(logicamente con los tipos de datos que tengas)

Salu2
  #3 (permalink)  
Antiguo 29/01/2008, 10:00
 
Fecha de Ingreso: marzo-2003
Mensajes: 524
Antigüedad: 21 años, 1 mes
Puntos: 2
Re: Problemas varios Select dentro de un mismo PL

Muchas gracias Seyko, mira aquí voy a colocar un PL con Record,

Código PHP:
CREATE OR REPLACE FUNCTION sp_buscar () RETURNS setof record AS
$BODY$
declare
r record;
begin
for r in 
    EXECUTE 
'select * from tb_clasificacion' 
loop
    
return next r;
end loop;

return;
end;$BODY$
LANGUAGE 'plpgsql' 
y luego para ejecutarlo coloco así


Código PHP:
select from sp_buscar() as ( id_clasi  float8,   cod_clasi float8  ,   desc_clasi varchar(30) ) 
Hice lo que tu me dijiste de color los “as ( id_clasi float8, cod_clasi float8 , desc_clasi varchar(30) )”, en este PL no tiene el Tipo pero la idea es tener el paramentro de entrada Tipo para que evalue a cual Tabla se hara una Query para retornar los registro.


mira tengo la siguiente problemática que dentro de un pl que estoy desarrollando y evaluando pueden haber diferentes salidas. Yo colocando el “AS” obligan a darle al momento de ejecutar el PL darle en mismo momentos los campos de Salida, ahora tu me dijiste que cambiara el Text por un Record, no tengo problemas pero no puede haber alguna forma:


1.- Que cuando dentro de PL tenga un RETURNS SetOf Text, me concatene los campos de salida yo pueda separados como en registro

2.- Que cuando dentro de PL tenga un RETURNS SetOf Record no sea colocar los campos de Salida Obligatoriamente
  #4 (permalink)  
Antiguo 29/01/2008, 11:30
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: Problemas varios Select dentro de un mismo PL

Cita:
1.- Que cuando dentro de PL tenga un RETURNS SetOf Text, me concatene los campos de salida yo pueda separados como en registro
Puedes hacer un split por la ',' (coma) en php. No se como se hace en php pero seguro que es muy facil.
Cita:
2.- Que cuando dentro de PL tenga un RETURNS SetOf Record no sea colocar los campos de Salida Obligatoriamente
Me temo que no, pero puedes crearte un tipo y devolverlo, postgres crea un tipo por tabla.

http://www.postgresql.org/docs/8.2/i...reatetype.html

Salu2
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 17:04.