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

[SOLUCIONADO] Crear una funcion que llame a una tabla con un id

Estas en el tema de Crear una funcion que llame a una tabla con un id en el foro de PostgreSQL en Foros del Web. Muy buenas, necesito crear una funcion en postgresql que le pase el numero de id de la tabla y me devuelva un valor de tipo ...
  #1 (permalink)  
Antiguo 15/02/2016, 13:54
 
Fecha de Ingreso: febrero-2016
Mensajes: 3
Antigüedad: 8 años, 2 meses
Puntos: 0
Crear una funcion que llame a una tabla con un id

Muy buenas,

necesito crear una funcion en postgresql que le pase el numero de id de la tabla y me devuelva un valor de tipo compuesto que sea todos los campos de ese ID.

La tabla es la siguiente:

create table client(id serial primary key, nom varchar, adreca varchar, ciutat varchar, codipostal int, pais varchar);

Le quiero pasar el valor del ID y que me devuelva todos los campos de ese ID de la tabla. He provado varias formas y todas saltan error.

Muchas gracias de atemano.
  #2 (permalink)  
Antiguo 15/02/2016, 14:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Crear una funcion que llame a una tabla con un id

Cita:
He provado varias formas y todas saltan error.
Postea todo lo que has proBado, porque si no sabemos lo que hiciste, no es posible decirte qué haces mal.
Hasta ahora la telepatía no se nos da.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/02/2016, 14:28
 
Fecha de Ingreso: febrero-2016
Mensajes: 3
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Crear una funcion que llame a una tabla con un id

Esto es lo que he encontrado mas logico para que me funcione, aun que el return de integer no me acaba de cuadrar si lo que quiero es toda la fila de ese ID, pero no se como hacer-lo.

Código SQL:
Ver original
  1. CREATE FUNCTION adreca_client(i INT) RETURN INTEGER AS $$
  2. BEGIN
  3. SELECT * FROM client WHERE id = i;
  4. END;
  5. $$ LANGUAGE plpgsql;


El error que sale es el siguiente:
Código BASH:
Ver original
  1. ERROR:  query has no destination for result data
  2. HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
  3. CONTEXT:  PL/pgSQL function "adreca_client" line 1 at SQL statement

Última edición por gnzsoloyo; 15/02/2016 a las 14:43 Razón: Faltaba información
  #4 (permalink)  
Antiguo 15/02/2016, 14:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Crear una funcion que llame a una tabla con un id

Mira, el problema es de una simpleza muy grande...

Una función devuelve siempre un único valor, el cual está definido en el prototipo. Eso quiere decir que si estás definiendo la función para que te devuelva un INTEGER, sólo puede dar como salida un INTEGER, y NO un registro entero.
¿Se entiende?

No puedes pedirle manzanas y que te devuelva caballos. Así de simple.

Ahora bien, esto mismo es lo que te está respondiendo PostgreSQL, solamente que no lo estás leyendo:

1) "query has no destination for result data"
TE dice que la consulta no tiene un destino para los datos resultantes, es decir, no estás haciendo que los datos de la query se almacenen en una variable de ninguna clase.

2) "If you want to discard the results of a SELECT, use PERFORM instead"
Si quieres que los datos sean descartados, debes usar PERFORM.

En esencia, una query en la funcion debe depositar los datos de salida en alguna variable, o se pierden. La variable debería ser el RETURN de la función almacenada, y no lo estás haciendo.
Por otro lado, si quieres obtener varios datos, debes usar stored procedures, no functions. No sé si PostgreSQL tiene tipos de dato RECORD o collections, como otros DBMS. Si es asi, podrians probar.

Pero lo más importante:Si estás intentando aprender, usa los ejemplos del manual de referencia oficial, y recién cuando los hayas entendido, haz la prueba con tu base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/02/2016, 08:30
 
Fecha de Ingreso: febrero-2016
Mensajes: 3
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Crear una funcion que llame a una tabla con un id

Muy buenas,

al final lo solucione de la siguiente manera:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION adreca_client(i INT) RETURNS TABLE(id INT, nom VARCHAR
  2.        , adreca VARCHAR
  3.        , ciutat VARCHAR
  4. , codipostal INT
  5. , pais VARCHAR ) AS $$
  6. SELECT id
  7. , nom
  8. , adreca
  9. , ciutat
  10. , codipostal
  11. , pais
  12. FROM client
  13. WHERE id = $1; $$ LANGUAGE SQL;


Muchas gracias por la ayuda gnzsoloyo :D
  #6 (permalink)  
Antiguo 17/02/2016, 08:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Crear una funcion que llame a una tabla con un id

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: funcion, tabla
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 09:04.