Asumiendo la responsabilidad, sigo colocando mis comentarios...
Guiandome de algunos apuntes, como este:
http://es.tldp.org/Postgresql-es/web...mer/x1503.html
he probado algunas cosas... a la tabla he agregado un campo fecha, y la función y el disparador han quedado así:
Código:
CREATE OR REPLACE FUNCTION fporcentaje() RETURNS "trigger"
AS '
DECLARE
porcentaje double precision;
BEGIN
porcentaje := NEW.total;
NEW.porcentaje := porcentaje;
NEW.registro := ''now()'';
RETURN NEW;
END
'
LANGUAGE plpgsql;
CREATE TRIGGER calporc
AFTER INSERT OR UPDATE ON poblacion
FOR EACH ROW
EXECUTE PROCEDURE fporcentaje();
caso 1:
sí quito de la función la línea: NEW.registro := ''now'';, al insertar un registro nuevo:
insert into poblacion (total, celulares) values (100,23)
sólo inserta los datos explícitos, más no hace nada sobre el campo porcentaje de la tabla, que es el que se define en la función.
caso 2:
dejando la línea, arroja el siguiente erro:
Error de SQL:
ERROR: syntax error en o cerca de "now" at character 11
CONTEXT: PL/pgSQL function "fporcentaje" line 6 at assignment
En la declaración:
insert into poblacion (total, celulares) values (100,23)
donde la línea 6, obviamente, hace referencia a la línea en cuestión.
Ciertamente, en el ejemplo, aparece now sin los parentesis, y el llamado a la función, se hace con los parentesis... vale decir, que he probado ambas, y arroja mismo error....
Sospecho, pero no sé cómo probarlo, que o el disparador no le está llegando a la función, o en la función no está devolviendo el valor asignado... demás está decir, que el campo donde debería guardarse el valor calculado en la función queda como NULL