Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: gfd en 16 Mayo 2010, 03:30 am



Título: ayuda con postgresql, funciones y jpgraph
Publicado por: gfd en 16 Mayo 2010, 03:30 am
saludos gente de hacker.net


el motivo de mi post es el siguente

tengo una base de datos en postgresql , una pagina web, y un servidor apache , bueno esa es la descripcion general de mi sistema, el asunto es que tengo que graficar datos estadisticos de mi sistema, y para ello usare jpgraph, por lo que investigue jpgrapt tiene funciones independientes a bases de datos, basta con hacer una consulta a la base, meter el resultado en un arreglo y con eso jpgrapt podria graficar, hay alguna forma de reutilizar las funciones que tengo en mi base de datos para poder obtener los datos que necesito para graficar???


estas son las tablas y los triggers



-- Table: actividades_programa

-- DROP TABLE actividades_programa;

CREATE TABLE actividades_programa
(
  num serial NOT NULL,
  clave_programa integer,
  tipo character varying(1),
  folio integer,
  CONSTRAINT actividades_programa_pkey PRIMARY KEY (num),
  CONSTRAINT actividades_programa_folio_key UNIQUE (folio),
  CONSTRAINT actividades_programa_folio_check CHECK (folio > 0),
  CONSTRAINT actividades_programa_num_check CHECK (num > 0)
)
WITHOUT OIDS;
ALTER TABLE actividades_programa OWNER TO postgres;






-- Table: orden_trabajo

-- DROP TABLE orden_trabajo;

CREATE TABLE orden_trabajo
(
  n_control serial NOT NULL,
  folio integer NOT NULL,
  num integer,
  clave_tservicio integer NOT NULL,
  nombre_asignado character varying(50) NOT NULL,
  fecha_realizacion date NOT NULL,
  fecha_liberado date,
  fecha_aprobado date,
  herramientas_util character varying(80) NOT NULL,
  CONSTRAINT orden_trabajo_pkey PRIMARY KEY (n_control),
  CONSTRAINT orden_trabajo_clave_tservicio_fkey FOREIGN KEY (clave_tservicio)
      REFERENCES t_servicios (clave_tservicios) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT orden_trabajo_folio_fkey UNIQUE (folio),
  CONSTRAINT orden_trabajo_clave_tservicio_check CHECK (clave_tservicio > 0),
  CONSTRAINT orden_trabajo_folio_check CHECK (folio > 0),
  CONSTRAINT orden_trabajo_n_control_check CHECK (n_control > 0),
  CONSTRAINT orden_trabajo_num_check CHECK (num > 0)
)
WITHOUT OIDS;
ALTER TABLE orden_trabajo OWNER TO postgres;






-- Function: actualiza_realizado_e()

-- DROP FUNCTION actualiza_realizado_e();

CREATE OR REPLACE FUNCTION actualiza_realizado_e()
  RETURNS "trigger" AS
$BODY$
declare F integer;
declare N integer;
BEGIN
  select into F new.Folio from Orden_Trabajo;
  select into N Num from Actividades_Programa where F = Folio;
 
  Update  E SET Fecha = NOW(), Listo_Orden = 'SI'
  where N = Num and Prog_Realizado = 'R';
 
  RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION actualiza_realizado_e() OWNER TO postgres;








-- Trigger: actividades_programa on actividades_programa

-- DROP TRIGGER actividades_programa ON actividades_programa;

CREATE TRIGGER actividades_programa
  BEFORE INSERT OR UPDATE
  ON actividades_programa
  FOR EACH ROW
  EXECUTE PROCEDURE actividades_programa();

-- Trigger: inserta_o on actividades_programa

-- DROP TRIGGER inserta_o ON actividades_programa;

CREATE TRIGGER inserta_o
  AFTER INSERT
  ON actividades_programa
  FOR EACH ROW
  EXECUTE PROCEDURE inserta_o();

-- Trigger: inserta_p on actividades_programa

-- DROP TRIGGER inserta_p ON actividades_programa;

CREATE TRIGGER inserta_p
  AFTER INSERT
  ON actividades_programa
  FOR EACH ROW
  EXECUTE PROCEDURE inserta_p();

-- Trigger: inserta_r on actividades_programa

-- DROP TRIGGER inserta_r ON actividades_programa;

CREATE TRIGGER inserta_r
  AFTER INSERT
  ON actividades_programa
  FOR EACH ROW
  EXECUTE PROCEDURE inserta_r();





-- Trigger: actualiza_realizado_e on orden_trabajo

-- DROP TRIGGER actualiza_realizado_e ON orden_trabajo;

CREATE TRIGGER actualiza_realizado_e
  BEFORE INSERT
  ON orden_trabajo
  FOR EACH ROW
  EXECUTE PROCEDURE actualiza_realizado_e();


la itnencion es recopiar la info de las actividades realizadas respecto a las actividades rpogramadas .... :D


gracias espero y me pueda ayudar






Título: Re: ayuda con postgresql, funciones y jpgraph
Publicado por: Kase en 16 Mayo 2010, 13:58 pm
en realidad no seme ocurre como.... se que los triggers te generan tuplas al vuelo, pero no sabria como acceder a ellas.....
lo que puedes hacer es llamar ala funciones desde ¿php?   con un  select *  from function() de esa  forma si apuntas ala tabla generada al vuelo.....
pero por tu nivel de programacion me imagino que lo sabes, y que no es lo que necesitas =/


podrias modificar tu funcion demodo que tambien genere un log del movimiento que hace asi ya tendrias una tabla real para acceder.

o podrias explicarnos tus funciones XD eske no soy bueno lellengo funciones de postgres en lenguage pglnoseke  solo las conozco en sql


Título: Re: ayuda con postgresql, funciones y jpgraph
Publicado por: gfd en 17 Mayo 2010, 16:39 pm
gracias por responder, si de echo estoy manipulando los datos asi como lo mencionas pero ps se supone que es una funcion y tiene que ser mas elaborada, estructurada ..... estoy pensando en que dentro de la funcion me genere la consulta y la misma funcion retorne los valores del arreglo pero bueno vere como se puede hacer eso XD, grax por responder


Título: Re: ayuda con postgresql, funciones y jpgraph
Publicado por: ^Tifa^ en 18 Mayo 2010, 16:25 pm
Yo estaria mas de acuerdo con Kase sobre la generacion de un log (una tabla o vista)  con la info de cada funcion llamada por los TRIGGERS, ya que tienes el dilema que los TRIGGERS llaman a las funciones pero a pesar que las funciones estan retornando valores, estos no son captados por el TRIGGER (Corrigeme en este punto pero porque haces EXECUTE PROCEDURE en los TRIGGERS si estas llamando funciones no procedimientos almacenados? Yo se que debido a los retornos en otras bases de datos relacionales que soportan PL/SQL no se puede ejecutar una funcion en un trigger pero si un procedimiento que no retorna nada) A lo mejor en Postgresql es similar y por eso ejecutas un procedimiento en vez de llamar una funcion.

Podrias en ver de utilizar funciones y retornar valores que ciertamente no vas a utilizar y se quedan ahi en la nada, sustituir las funciones por procedimientos y adentro de las instrucciones SQL que tienen los procedimientos, aplicar esos cambios tambien en tu tabla o vista log como sugirio Kase. Y utilizar esa tabla o vista log como la tabla a la cual accedera Jgraph a consultar. Porque directamente no puedes retornar nada desde los TRIGGERS y no puedes utilizar ningun valor retornado a los TRIGGERS.