Re: Ayuda con query

From: Maria Antonieta Ramirez <maramirez(at)ulsaneza(dot)edu(dot)mx>
To: Anthony Sotolongo <asotolongo(at)gmail(dot)com>, FORO POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda con query
Date: 2017-10-10 21:49:37
Message-ID: CY4PR1801MB1927630581055A8AFA9FD240F6750@CY4PR1801MB1927.namprd18.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Muchas gracias !!

Ya quedo resuelto mi problema!!

________________________________
De: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
Enviado: martes, 10 de octubre de 2017 16:03:56
Para: Maria Antonieta Ramirez; FORO POSTGRES
Asunto: Re: Ayuda con query

Hola nuevamente, devuelve un solo registro pues esta diseñada para devolver un solo registro :-/, si quieres mas de un registro, debes decirle a la función que lo haga y que retorne un setof o un table y dentro de ella hacer un return next dentro del ciclo, para seguir con el estilo que pusiste inicialmente, algo como esto que esta a continuación:

CREATE OR REPLACE FUNCTION ejemplo_record2(character)
RETURNS SETOF record AS
$BODY$
DECLARE
REG RECORD;
BEGIN
FOR REG IN (select datname, datdba from pg_database
Where datname like $1)
loop
return next REG;
end loop;
return;
end;
$BODY$
LANGUAGE plpgsql;

select * from ejemplo_record2('%template%') as (nombre name, dba oid)

Saludos

PD: hay otras formas de hacerlo que no es un ciclo

On 10/10/17 15:07, Maria Antonieta Ramirez wrote:

Muchas gracias , exelente.

Otra pregunta mas, resulta que si ejecuto mi query aparte, me da dos registros con un usuario "asotero" y al ejecutar mi funcion solo me da un registro , es decir solo lo encontro en la primera tabla que es usuarios y no me muestra el de la tabla usuariosadmin, mi pregunta es, si en el codigo de mi consulta tengo que indicarle algo mas?

________________________________
De: Anthony Sotolongo <asotolongo(at)gmail(dot)com><mailto:asotolongo(at)gmail(dot)com>
Enviado: martes, 10 de octubre de 2017 12:41:47
Para: Maria Antonieta Ramirez; FORO POSTGRES
Asunto: Re: Ayuda con query

Hola Maria Antonieta, como retornas un record desde hacer el cast de lo que retornas, algo como:

select * from educaciondistancia.busca_usuarios('blablabla') as (campo1 tipo_dato, campo2 tipo_dato, ....)

donde los campos deben ser de mismo tipo de dato que lo que devuelve la query que defines dentro de la función

por ejemplo:

CREATE or replace FUNCTION ejemplo_record(character) RETURNS RECORD AS
$BODY$
DECLARE
REG RECORD;
BEGIN
FOR REG IN (select datname, datdba from pg_database
Where datname =$1)
loop
return REG;
end loop;
end;
$BODY$
language 'plpgsql';

select * from ejemplo_record('postgres') as (nombre name, dba oid) --retorna los campos por separado
select ejemplo_record('postgres') --retorna los campos en un record

Saludos

On 10/10/17 14:23, Maria Antonieta Ramirez wrote:

Hola,

Ya tengo mi funcion de la siguiente manera:

CREATE or replace FUNCTION educaciondistancia.busca_usuarios(character) RETURNS RECORD AS
$BODY$
DECLARE
REG RECORD;
BEGIN
FOR REG IN (Select usuario.*
from (Select a.usuario , a.pwd , a.matricula, a.iniciosesion,a.ultimoacceso, a.token, a.tipousuario , a.activo
From educaciondistancia.usuarios a
Union all
Select b.usuario, b.pwd, b.personal, b.iniciosesion, b.fechaultimoacceso, b.token, b.tipousuario, b.activo
From educaciondistancia.usuariosadmin b
) usuario
Where usuario.usuario =$1)
loop
return REG;
end loop;
end;
$BODY$
language 'plpgsql';

solo que me muestra mi resultado en un solo renglón , como puedo hacer para que me lo muestre separado por campos

________________________________
De: Maria Antonieta Ramirez
Enviado: martes, 10 de octubre de 2017 11:10:56
Para: FORO POSTGRES
Asunto: Ayuda con query

Buen dia, De ante mano muchas gracias a todos por su apoyo.

De las opciones que me comentarón la que me resulto es la siguiente ya la complete con los campos que necesito.

Select usuario.*
from (Select a.usuario , a.pwd , a.matricula, a.iniciosesion,a.ultimoacceso, a.token, a.tipousuario , a.activo
From educaciondistancia.usuarios a
Union all
Select b.usuario, b.pwd, b.personal, b.iniciosesion, b.fechaultimoacceso, b.token, b.tipousuario, b.activo
From educaciondistancia.usuariosadmin b
) usuario
Where usuario.usuario = 'aramirez'

- Ahora tengo la siguiente duda:
A esta consulta tengo que agregar un valor, ambas tablas tienen el campo "tipousuario" y mi valor es 1 para mi tabla de usuarios y 2 para mi tabla de usuariosadmin; Yo quiero hacer esta consulta de forma que pueda ingresarle los siguientes valores a buscar : usuario y tipousuario

Puedo hacer una vista o tendria que meterlo a una funcion?
y si tienen un ejemplo se los agradeceria mucho.

Gracias.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Maria Antonieta Ramirez 2017-10-18 21:41:36 CONSULTA
Previous Message Anthony Sotolongo 2017-10-10 21:03:56 Re: Ayuda con query