RE: Ayuda con Funcion como procedimiento

From: Ricardo Martin Gomez <rimartingomez(at)hotmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Ayuda con Funcion como procedimiento
Date: 2007-05-29 16:10:47
Message-ID: BAY111-W4721D6491EF30F50243AFA32F0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alguien podria ser tan amable de contestarme mi post si es que tienen conocimiento?
Hace 3 semanas que lucho para poder hacer andar esta funcion, y en este foro solo veo que contestan siempre lo mismo.
Gracias de todas maneras.Saludos Martin.

From: rimartingomez(at)hotmail(dot)comTo: pgsql-es-ayuda(at)postgresql(dot)orgSubject: [pgsql-es-ayuda] Ayuda con Funcion como procedimientoDate: Mon, 28 May 2007 18:40:21 +0000

Buenas amigos listeros, estoy introduciendome con el uso de funciones como procedimientos almacenados y tengo bastantes problemas con esto.Les paso mi funcion -- Function: sinc_empresa()-- DROP FUNCTION sinc_empresa();CREATE OR REPLACE FUNCTION sinc_empresa() RETURNS void AS$BODY$DECLARE -- controladores de sincronizacion idDesde int; idHasta int; fechaDesde timestamp without time zone; fechaHasta timestamp without time zone; -- cursores curPais refcursor; curProvincia refcursor; curLocalidad refcursor; curDomicilio refcursor; curPersona refcursor; curPersonaFisica refcursor; curPersonaJuridica refcursor; curPersonaDomicilio refcursor; curEmpresa refcursor; curSucursal refcursor; -- registros registroPais pais_t%ROWTYPE; registroProvincia provincia_t%ROWTYPE; registroLocalidad localidad_t%ROWTYPE; registroDomicilio domicilio_t%ROWTYPE; registroPersona persona_t%ROWTYPE; registroPersonaFisica persona_fisica_t%ROWTYPE; registroPersonaJuridica persona_juridica_t%ROWTYPE; registroPersonaDomicilio persona_domicilio_r%ROWTYPE; registroEmpresa empresa_t%ROWTYPE; registroSucursal sucursal_t%ROWTYPE;BEGIN -- CALCULAR FECHA DESDE select into idDesde COALESCE(max(idempresa),0) from empresa_t; IF (idDesde = 0) then fechaDesde:= current_timestamp - interval '25 Days'; ELSE select into fechaDesde creada from dblink('hostaddr=172.16.132.31 dbname=basename user=username password=passuser', 'select creada+ interval ''0.000001 second'' from empresa_t where idempresa = idDesde') as miDesde(creada timestamp); END IF; -- CALCULAR FECHA HASTA select into fechaHasta creada from dblink('hostaddr=10.1.1.0 dbname=basename user=username password=passuser', 'select creada from empresa_t where idempresa = (select max(idempresa) from empresa_t)')as miHasta(creada timestamp); OPEN curPais FOR SELECT idpais, nombre, ddi FROM dblink('hostaddr=172.16.132.31 dbname=basename user=username password=passuser', 'SELECT idpais, nombre, ddi FROM pais_t WHERE creada BETWEEN '||to_char(fechaDesde, '''YYYY-MM-DD HH:MM:SS.MS''')||' AND '||to_char(fechaHasta, '''YYYY-MM-DD HH:MM:SS.MS''')|| 'OR actualizada BETWEEN '||to_char(fechaDesde, '''YYYY-MM-DD HH:MM:SS.MS''')||' AND '||to_char(fechaHasta, '''YYYY-MM-DD HH:MM:SS.MS''') ||'') as mipais(idpais bigint, nombre character varying(255), ddi bigint); --Inserta o acutaliza paises --LOOP FETCH curPais INTO registroPais; --EXIT WHEN NOT FOUND; while found loop IF (EXISTS (SELECT 1 FROM pais_t WHERE idpais = registroPais.idpais)) THEN UPDATE pais_t SET nombre=registroPais.nombre, ddi = registroPais.ddi; ELSE INSERT INTO pais_t(idpais, nombre, ddi) values (registroPais.idpais, registroPais.nombre, registroPais.ddi); END IF; END LOOP; CLOSE curPais; END $BODY$ LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION sinc_empresa() OWNER TO postgres;Esta funcion compila bien y la idea es traer datos a travez de dblink() de una base a otra y actualizarlos si existen o insertarlos sino existen en la base destino. 1) como llamo a la funcion para que se ejecute?probe conPERFORM sinc_empresa(); ERROR: syntax error at or near "PERFORM" Estado SQL:42601 Caracter: 1 PERFORM sinc_empresa; ERROR: syntax error at or near "PERFORM" Estado SQL:42601 Caracter: 1 execute sinc_empresa(); ERROR: syntax error at or near ")" Estado SQL:42601 Caracter: 22 execute sinc_empresa;ERROR: prepared statement "sinc_empresa" does not existEstado SQL:26000 La unica sentencia que me devuelve algo es select sinc_empresa(); me devuelve un registro con un campo nulo, seria algo esperable ya que intento hacer un procedimiento almacenado. pero ....Resulta que la cuestion mas importante que no realiza ningun insert y ningun update o sea, que aparenta no hacer nada mi funcion. Por favor alguien que puede ayudarme a encontrarle la vuelta a este caso, que hace ya dias que lucho y sin resultados. gracias a todos. Saludos Martin.

Consigue el nuevo Windows Live Messenger Pruébalo
_________________________________________________________________
¡Ya está aquí Windows Live Spaces! Ahora podrás crear fácilmente tu propio sitio Web.
http://spaces.live.com/signup.aspx

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-05-29 16:16:32 Re: Ayuda con Funcion como procedimiento
Previous Message Alvaro Herrera 2007-05-29 16:07:43 Re: Ayuda con Explain de consulta