Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > PostgreSQL

Respuesta
 
Herramientas Desplegado
Antiguo 09-feb-2007, 20:17   #1 (permalink)
cacr está en el buen camino
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 523
función+disparador que calcule un porcentaje a partir de dos campos

Saludos

Estoy buscando de aprender a usar funciones y disparadores, con lo cual me inicio con una cosa sencilla...

Una tabla con un campo de total de habitantes, y otro con total de habitantes con celulares, deseo saber a qué porcentaje equivale... he probado con:

[SQL]CREATE FUNCTION cporc() RETURNS "trigger"

AS '

DECLARE

resultado boolean;

BEGIN

EXECUTE (vs_aseo/v_ocup) *100;

return NEW;

END;

'

LANGUAGE plpgsql;

CREATE TRIGGER dporc AFTER
INSERT ON cobertura
FOR EACH ROW EXECUTE PROCEDURE cporc();
[/SQL]

pero, obviamente, no está bien...

Cualquier orientación, será siempre bien recibida... gracias de una
__________________
Gracias de todas todas
-----
Linux!
cacr está desconectado   Responder Citando
Antiguo 11-feb-2007, 13:12   #2 (permalink)
cacr está en el buen camino
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 523
Re: función+disparador que calcule un porcentaje a partir de dos campos

Vale... más datos, más pruebas:

plpgsql está para la BD que estoy usando!

La tabla tiene:
poblacion -> integer
celulares -> integer
porcentaje -> float

La función y el disparador, que se crean sin ningún problema:

Código:
CREATE OR REPLACE FUNCTION fporcentaje()
RETURNS trigger AS '
	SELECT (($2 * 100) / $1)
' LANGUAGE plpgsql;

CREATE TRIGGER calporc
  AFTER INSERT OR UPDATE ON poblacion
  FOR EACH ROW EXECUTE 
  PROCEDURE fporcentaje('total','celulares');
Ejecuto un insert:

insert into poblacion (total, celulares) values (100,60)

y el Error:

Código:
Error de SQL:

ERROR:  syntax error en o cerca de "SELECT"
CONTEXT:  compile of PL/pgSQL function "fporcentaje" near line 1

En la declaración:
insert into poblacion (total, celulares) values (100,60)
El asunto, es que no sé por donde voy... cualquier orientación, será siempre bien recibida...
__________________
Gracias de todas todas
-----
Linux!
cacr está desconectado   Responder Citando
Antiguo 11-feb-2007, 16:45   #3 (permalink)
cacr está en el buen camino
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 523
Re: función+disparador que calcule un porcentaje a partir de dos campos

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
__________________
Gracias de todas todas
-----
Linux!
cacr está desconectado   Responder Citando
Antiguo 11-feb-2007, 19:48   #4 (permalink)
cacr está en el buen camino
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 523
Re: función+disparador que calcule un porcentaje a partir de dos campos

Bueno, para finalizar, el asunto quedó resuelto, de la siguiente manera:

Código:
-- FUNCION PARA CALCULAR UN PORCENTAJE	(REGLA DE TRES)
  
-- funcion y disparador
-- para calcular el porcentaje que corresponde a un total de poblacion
CREATE OR REPLACE FUNCTION fporcentaje() RETURNS trigger 
 AS '
	DECLARE
	    porc double precision;
	BEGIN
	    NEW.porcentaje := ((NEW.celulares*100)/NEW.total);
	    return NEW;
	END;
'
LANGUAGE plpgsql;

CREATE TRIGGER calporc
  AFTER INSERT OR UPDATE ON poblacion
  FOR EACH ROW EXECUTE 
  PROCEDURE fporcentaje('total','celulares');
__________________
Gracias de todas todas
-----
Linux!
cacr está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 1,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 19:56.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93