You are on page 1of 3

CREATE TABLE tbl_audit (

pk_audit serial NOT NULL,


"TableName" character(45) NOT NULL,
"Operation" char(1) NOT NULL,
"OldValue" text,
"NewValue" text,
"UpdateDate" timestamp without time zone NOT NULL,
"UserName" character(45) NOT NULL,
CONSTRAINT pk_audit PRIMARY KEY (pk_audit))
WITH (OIDS=FALSE);
ALTER TABLE tbl_audit OWNER TO postgres;
CREATE OR REPLACE FUNCTION fn_log_audit() RETURNS trigger AS
$$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO tbl_audit ("TableName", "Operation", "OldValue", "NewValue", "Up
dateDate", "UserName")
VALUES (TG_TABLE_NAME, 'D', OLD, NULL, now(), USER);
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO tbl_audit ("TableName", "Operation", "OldValue", "NewValue", "Up
dateDate", "UserName")
VALUES (TG_TABLE_NAME, 'U', OLD, NEW, now(), USER);
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO tbl_audit ("TableName", "Operation", "OldValue", "NewValue", "Up
dateDate", "UserName")
VALUES (TG_TABLE_NAME, 'I', NULL, NEW, now(), USER);
RETURN NEW;
END IF;
RETURN NULL;
END;
$$
LANGUAGE 'plpgsql';
ALTER FUNCTION fn_log_audit() OWNER TO postgres;
CREATE TRIGGER tbl_atributos_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON articulo FOR EACH ROW EXECUTE PROCEDURE fn_log_audit();
CREATE TRIGGER tbl_atributos_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON cliente FOR EACH ROW EXECUTE PROCEDURE fn_log_audit();
CREATE TRIGGER tbl_atributos_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON control FOR EACH ROW EXECUTE PROCEDURE fn_log_audit();
CREATE TRIGGER tbl_atributos_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON detalle FOR EACH ROW EXECUTE PROCEDURE fn_log_audit();
CREATE TRIGGER tbl_atributos_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON empleado FOR EACH ROW EXECUTE PROCEDURE fn_log_audit();
CREATE TRIGGER tbl_atributos_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON factura FOR EACH ROW EXECUTE PROCEDURE fn_log_audit();
CREATE TRIGGER tbl_atributos_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON linea FOR EACH ROW EXECUTE PROCEDURE fn_log_audit();
CREATE OR REPLACE
function Actualiza_descuentos(valor integer, modo integer) returns integer as
$$
DECLARE
-- Declaracion de variables locales
newdscto integer :=0;
BEGIN
case modo
when 1 then
update articulo set descuento=tt.newdscto from (select idarticulo
, descuento+valor as newdscto
from articulo) tt
where articulo.idarticulo=tt.idarticulo
;
when 2 then
update articulo set descuento=tt.newdscto from (select i
darticulo, descuento-valor as newdscto
from articulo) tt
where articulo.idarticulo=tt.idarticulo
;
else
raise notice 'El valor de modo es 1 o 2';
end case;
return 1;
END
$$ language plpgsql;
Cursores
create or replace function f_cursor() returns void as
$$
DECLARE
c_tabla1 refcursor;
data record;
begin
open c_tabla1 for execute 'select * from linea';
loop
fetch c_tabla1 into data;
if not found then
exit;
end if;
raise notice 'Nombre de Linea % :% ',data.idlinea, data.descripcion ;
end loop;
End;
$$ LANGUAGE 'plpgsql';

create or replace function f_cursor1(x integer) returns void as


$$
DECLARE
c_tabla1 refcursor;
data record;
begin
open c_tabla1 for execute 'select * from linea';
loop
fetch c_tabla1 into data;
if not found then
exit;
end if;
raise notice 'Nonbree Linea % :% Contador %',data.idlinea, data.descripcion
,data.contador+x ;
end loop;
End;
$$ LANGUAGE 'plpgsql';

create or replace function f_cursor2() returns void as


$$
DECLARE
c_tabla1 refcursor;
data record;
begin
open c_tabla1 for execute 'select * from articulo';
loop
fetch c_tabla1 into data

if not found then


exit;
end if;
raise notice 'Inventario de % es %',data.descripcion, data.preciocosto*data
.stock;
end loop;
close c_tabla1;
End;
$$ LANGUAGE 'plpgsql';

You might also like