bueno, en si no se llena en una sola tabal sino en varias, te pongo la consulta que he hecho para que vean la idea:
-- Function: persona.spu_agregarpersonanatural(character varying, character varying, character varying, character, timestamp without time zone, numeric, numeric, character varying) -- DROP FUNCTION persona.spu_agregarpersonanatural(character varying, character varying, character varying, character, timestamp without time zone, numeric, numeric, character varying); CREATE OR REPLACE FUNCTION persona.spu_agregarpersonanatural( p_apep character varying, p_apem character varying, p_nom character varying, p_sexo character, p_fechanac timestamp without time zone, p_cond numeric, p_tipodoc integer, p_nrodoc character varying) -- RETURNS SETOF "resultado" AS RETURNS TABLE(per_id integer, pda_nombrecompleto character varying, pdi_numerodocide character varying, pen_fechanacimiento date, pen_sexo character) AS $BODY$ DECLARE -- v_rs resultado%rowtype; BEGIN IF(CHAR_LENGTH(TRIM(COALESCE(p_nrodoc,''))) = 8) THEN IF NOT EXISTS( SELECT p.pdi_numerodocide FROM persona.personaDocumentoIdentidad p WHERE p.pdi_numerodocide= p_nrodoc) THEN /*** Secuencia de Insercion: - persona - personaEstadoCivil - personaDocumentoIdentidad - personaDatos - personaNatural **/ -- Insertamos en la tabla Persona INSERT INTO persona.persona( pet_id, --personaTipo (1 Natural / 2 Juridico) sis_id, -- Sistema ( 1 Migracion / 2 WebServices) suc_id, -- Sucursal (1 Lima / 2 Dolphin) pco_id -- Persona Condicion ( 1 / 2) ) VALUES( 1, -- POr se PersonaNatural se le coloca 1 2, -- Al ser llamdo por webservices se usa 2 1, -- Sucursal Lima p_cond); -- Insertamos en la tabla PERSONADATOS INSERT INTO persona.personaDatos( per_id, -- Id de Persona pda_nombreCompleto, pda_activo ) VALUES( currval('persona.persona_per_id_seq'), p_apep || ' '|| p_apem || ' ' || p_nom, true ); -- Insetamosen la tabla persona Natural INSERT INTO persona.personaNatural( pda_id, pen_apellidoPaterno, pen_apellidoMaterno, pen_nombre, pen_fechaNacimiento, pen_sexo ) VALUES( currval('persona.personadatos_pda_id_seq'), p_apep, p_apem, p_nom, p_fechaNac, p_sexo ); INSERT INTO persona.personaDocumentoIdentidad( per_id, pit_id, pdi_numeroDocIde ) VALUES( currval('persona.persona_per_id_seq'), p_tipodoc, p_nrodoc ); ELSE /*v_rs.error = -10; v_rs.mensaje = 'Error al momento de generar el registro';*/ select * from persona.spu_buscarpersonaxdoc(p_tipodoc,p_nrodoc); END IF; END IF; return; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION persona.spu_agregarpersonanatural(character varying, character varying, character varying, character, timestamp without time zone, numeric, numeric, character varying) OWNER TO postgres; El 11 de octubre de 2011 12:04, Rodrigo Gonzalez <rjgonz...@estrads.com.ar>escribió: > On 10/11/2011 02:00 PM, CarloS Sing Ramos wrote: > > el v_campos ke tipo de dato seria? > > El 11 de octubre de 2011 11:54, Rodrigo Gonzalez <rjgonz...@estrads.com.ar > > escribió: > >> On 10/11/2011 01:31 PM, CarloS Sing Ramos wrote: >> >> Buenas, necesito su ayuda, tengo que hacer un store que me busque el DNI y >> en caso lo encuentre me retorne los datos pero en caso no lo encuentre me >> haga el registro de los campos nombre, apepat, apemat, sexo, .. entre otros. >> >> >> Espero puedan ayudarme, gracias de antemano. >> >> >> Algo asi dentro de la funcion... >> >> SELECT campos INTO v_campos FROM tabla WHERE dni = $1; >> IF NOT FOUND THEN >> -- Creo los datos >> END IF; >> >> RETURN v_campos; >> >> No quites a la lista por favor... > > Si queres retornar campos de una tabla seria > > DECLARE v_campos tabla%ROWTYPE; > > Si es de varias o algo asi tenes que crear un tipo compuesto y despues > hacer > > DECLARE v_campos mi_tipo_compuesto; > > Saludos > -- Salu2 Linux Register User #525697 --==[[Carlos Sing]]==--