Received: from maia.hub.org (maia-2.hub.org [200.46.204.251]) by mail.postgresql.org (Postfix) with ESMTP id 9AF681337B51 for ; Sat, 22 Jan 2011 05:37:15 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.251]) (amavisd-maia, port 10024) with ESMTP id 01087-04 for ; Sat, 22 Jan 2011 09:37:08 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wy0-f174.google.com (mail-wy0-f174.google.com [74.125.82.174]) by mail.postgresql.org (Postfix) with ESMTP id DBFB21337B8B for ; Sat, 22 Jan 2011 05:37:07 -0400 (AST) Received: by wyb28 with SMTP id 28so2626022wyb.19 for ; Sat, 22 Jan 2011 01:37:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:from:content-type:content-transfer-encoding :subject:date:message-id:to:mime-version:x-mailer; bh=tOb8v9EbOffXvbRmOi0ekfx5+gvUmwBLULyPCU9W7+0=; b=DnEli4rQP491kL48L/NQcRaLpwcy4YdfkEtOWpffeHPeDGd4QeNmSXg2bwUnb1RBAA ExZMOEbnMyp02SGJ67KXv9MJHkZ2qerIk5PEModSuvCSrIbSUSxdcGCe2CHpsqQCSMrd 1Zp0GqCut0d93swwpgxTBbP8KSsKvcWJBBd9Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:content-type:content-transfer-encoding:subject:date:message-id :to:mime-version:x-mailer; b=l57gTUg+7cAPpx1woy6fiORujaF0la1VliM8qSgEM5fo/9pbldzvkrsfErwhay1xm4 8yKzgfw6gY006EKlkSpQ7wHzgf+6UJhFa2Xlir9qWhZJELtbH8K3VO+KDZDcboMOFhRP pzAF9vmiaM3cCEZ9tOMWu7IEVRzkcrXm9Crhw= Received: by 10.227.182.68 with SMTP id cb4mr1880908wbb.218.1295689026995; Sat, 22 Jan 2011 01:37:06 -0800 (PST) Received: from [192.168.200.220] ([212.230.48.23]) by mx.google.com with ESMTPS id o33sm5376673wej.37.2011.01.22.01.37.02 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 22 Jan 2011 01:37:06 -0800 (PST) From: =?iso-8859-1?Q?Adelo_Herrero_P=E9rez?= 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 10:37:01 +0100 Message-Id: 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.111 tagged_above=-5 required=5 tests=BAYES_50=0.8, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, T_TO_NO_BRKTS_FREEMAIL=0.01 X-Spam-Level: X-Archive-Number: 201101/64 X-Sequence-Number: 35011 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