Received: from maia.hub.org (maia-3.hub.org [200.46.204.243]) by mail.postgresql.org (Postfix) with ESMTP id C67381337C66 for ; Sat, 22 Jan 2011 03:02:27 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.243]) (amavisd-maia, port 10024) with ESMTP id 78285-03-6 for ; Sat, 22 Jan 2011 07:02:20 +0000 (UTC) X-Greylist: delayed 00:29:03.345171 by SQLgrey-1.7.6 Received: from servidor.grupo-nexcom.com (servidor.grupo-nexcom.com [212.230.51.188]) by mail.postgresql.org (Postfix) with ESMTP id F32971337BF6 for ; Sat, 22 Jan 2011 03:01:34 -0400 (AST) Received: from localhost (localhost.localdomain [127.0.0.1]) by servidor.grupo-nexcom.com (Postfix) with ESMTP id CF5C64A1C04 for ; Sat, 22 Jan 2011 07:32:28 +0100 (CET) Received: from servidor.grupo-nexcom.com ([127.0.0.1]) by localhost (servidor.grupo-nexcom.com [127.0.0.1]) (amavisd-new, port 10024) with SMTP id zyYQONSB5kQq for ; Sat, 22 Jan 2011 07:32:28 +0100 (CET) Received: from [192.168.200.220] (unknown [212.230.48.23]) by servidor.grupo-nexcom.com (Postfix) with ESMTP id 409664A1C03 for ; Sat, 22 Jan 2011 07:32:28 +0100 (CET) From: MoNiLlO Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Control reached end of trigger procedure without RETURN Date: Sat, 22 Jan 2011 07:32:27 +0100 Message-Id: <397A0940-896A-4DEF-873A-907976E8400B@adinf.es> To: pgsql-sql@postgresql.org Mime-Version: 1.0 (Apple Message framework v1082) X-Mailer: Apple Mail (2.1082) X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.8 tagged_above=-5 required=5 tests=BAYES_50=0.8 X-Spam-Level: X-Archive-Number: 201101/62 X-Sequence-Number: 35009 Buenos d=EDas: Tengo una funci=F3n que se dispara en un trigger cuya finalidad = es; crear un registro en otra tabla o actualizarlo y devolviendo el id = del registro creado/modificado para guardarlo en la tabla desde la que = se llama. Intentar=E9 explicarlo mejor: tablaA --> Es la que dispara el trigger y en la que quiero guardar el id = del registro modificado / creado en la tabla B. tablaB --> Digamos que es una tabla resumen de la tablaA y se mantiene = desde el trigger de la misma, creando modificando y/o borrando los = registros. Finalidad --> Eso, actualizar la tablaB desde la A y guardar en el = registro de de la tablaA a que registro de la tablaB "pertenece". Cuando hago el insert me devuelve el error del asunto=20 Control reached end of trigger procedure without RETURN y me indica la l=EDnea correspondiente al INSERT. =BFAcaso no contin=FAa el flujo if (not found) y deber=EDa hacer el = return NEW tras el insert? =BFy lo mismo en el update del exception? Agradezco de antemano vuestro tiempo y ayudas. Un saludo. P.D. Estructura de la funci=F3n. DECLARE id_tablaB integer; -- Id de la tabla B. BEGIN IF (TG_OP =3D 'DELETE') THEN -- Descontar valores ELSIF (TG_OP =3D 'UPDATE') THEN -- Modificar valores. ELSIF (TG_OP =3D 'INSERT') THEN -- Asignar valores END IF; -- Update con nuevos valores y retornamos el id para actualizar = detalle. UPDATE tablaB SET campo1=3Dvalor1, campo2=3Dvalor2 WHERE tablaA_id=3DNEW.tblaB_id=20 RETURNING tablaB_id INTO id_tablaB; -- Si no existe, hacemos el insert y retornamos el id para = actualizar detalle. IF (NOT FOUND) THEN BEGIN -- No exist=CCa el registro y lo = creamos. -- -- AQU=CD DEVUELVEL EL ERROR. -- INSERT INTO tablaB ( campo1,=20 campo2) VALUES ( valor1, valor2 ) RETURNING tablaB_id INTO id_tablaB; =09 EXCEPTION =09 WHEN UNIQUE_VIOLATION THEN UPDATE tablaB SET campo1=3Dvalor1, campo2=3Dvalor2 WHERE tablaA_id=3DNEW.tblaB_id=20 RETURNING tablaB_id INTO id_tablaB; END; END IF; -- Borrado de ventas_imp si el resumen del % y factura es 0. DELETE FROM tablaB=20 WHERE tablaA_id=3Did_tablaA AND (campo3=3D0 OR campo3 = IS NULL); -- Guardamos el id de la tabla ventas_imp y retornamos el record = modificado. NEW.tablaB_id :=3D id_tablaB return NEW; END