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.