Buenas tardes de nuevo.
Bueno, en realidad son dos preguntas, jejeje. Es que estoy empezando con PostgreSQL y bueno... vengo de SQL Server asi que algún que otro problemilla estoy teniendo.
Tengo un Procedimiento almacenado, el cual quiero que me devuelva unos registros de una tabla, ok, perfecto. El problema es que ademas de los registros de esa tabla, tambien quiero que me devuelva otros dos, que estan en otras dos tablas (Es decir, un simple inner join).
Los registros a recuperar son de las tablas tusuarios y tprovincias y tpaises. Pero claro, como veran en el SP la sintaxis esta mal, estoy seguro, pero.... no sé como puedo hacerlo, por eso les pido ayuda:
Código:
CREATE OR REPLACE FUNCTION PDAMEUSUARIO(IN pdni bpchar, IN pclave bpchar) RETURNS SETOF tusuarios AS
$BODY$
DECLARE reg_tabla tusuarios;
BEGIN
FOR reg_tabla IN SELECT cod_usuario, dni, nombre, apellido_1, apellido_2, fecha_nacimiento,
tusuarios.cod_provincia, tprovincias.provincia, tusuarios.cod_pais,
tpaises.pais, ciudad, codigo_postal, email, clave, telefono_movil,
descripcion, cod_buscar, notificarme, ver_todos
FROM tusuarios
INNER JOIN tpaises
ON tpaises.cod_pais = tusuarios.cod_pais
INNER JOIN tprovincias
ON tprovincias.cod_provincia = tusuarios.cod_provincia
WHERE DNI=pdni
AND CLAVE = pclave
LOOP
return next reg_tabla;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
La llamada es simple: select * from PDAMEUSUARIO('71641951-X', 'micarlito');
Y el error que sale cuando lo ejecuto, obivamente es:
ERROR: value too long for type character varying(2)
Estado SQL:22001
Contexto:PL/pgSQL function "pdameusuario" line 3 at for over select rows
En fin, espero me puedan resolver la duda, mi intención es (SI SE PUEDE) hacerlo sin refcursor, ya que es para programar en .NET y eso me da quebraderos de cabeza.
En fin, espero puedan ayudarme, desde ya, muchas gracias por todo.
Saludos.