Skip site navigation (1) Skip section navigation (2)

Re: Ayuda con funciones

From: CarloS Sing Ramos <carlossing(at)gmail(dot)com>
To: Rodrigo Gonzalez <rjgonzale(at)estrads(dot)com(dot)ar>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda con funciones
Date: 2011-10-11 17:07:34
Message-ID: CADbn=LsYN4YWdbHHsGOh_KZfQ0UaEnSjTLSiP1UqRx=D9EZ8EA@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
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
<rjgonzale(at)estrads(dot)com(dot)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 <rjgonzale(at)estrads(dot)com(dot)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]]==--

In response to

Responses

pgsql-es-ayuda by date

Next:From: Rodrigo GonzalezDate: 2011-10-11 17:20:27
Subject: Re: Ayuda con funciones
Previous:From: Gilberto Castillo MartínezDate: 2011-10-11 17:04:53
Subject: Re: Ejecutar copy con stdin en vb6

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group