UNPKG

3 kBapplication/x-sqlView Raw
1--set search_path=procesamiento;
2CREATE OR REPLACE FUNCTION controlar_modificacion_generada_trg()
3 RETURNS trigger AS
4$BODY$
5DECLARE
6 v_tabla_datos TEXT;
7 v_operativo TEXT;
8 v_generada DATE;
9 v_tipo text;
10 v_texto_op text;
11 v_texto_obj text;
12 v_registro_salida RECORD;
13
14BEGIN
15CASE TG_TABLE_NAME
16 WHEN 'tabla_datos' THEN
17 v_tabla_datos=OLD.tabla_datos;
18 v_operativo =OLD.operativo;
19 IF OLD.generada IS NOT NULL and OLD.tipo='externa' THEN
20 RAISE EXCEPTION 'ERROR no se puede modificar tabla_datos % del operativo %. Porque ya fue generado', v_tabla_datos, v_operativo;
21 END IF;
22 RETURN NEW;
23 --no controlo borrado
24 WHEN 'variables', 'variables_opciones' THEN
25 IF TG_TABLE_NAME='variables' THEN
26 v_texto_obj='variable';
27 ELSE
28 v_texto_obj='opcion';
29 END IF;
30 CASE TG_OP
31 WHEN 'INSERT' THEN
32 v_texto_op= 'agregar ';
33 v_registro_salida=NEW;
34 v_tabla_datos=new.tabla_datos;
35 v_operativo =new.operativo;
36 WHEN 'UPDATE' THEN
37 v_texto_op= 'modificar ';
38 v_registro_salida=NEW;
39 v_tabla_datos=old.tabla_datos;
40 v_operativo =old.operativo;
41 ELSE
42 v_texto_op= 'borrar ';
43 v_registro_salida=OLD;
44 v_tabla_datos=old.tabla_datos;
45 v_operativo =old.operativo;
46 END CASE;
47 SELECT generada , tipo
48 INTO v_generada, v_tipo
49 FROM tabla_datos
50 WHERE operativo=v_operativo AND tabla_datos=v_tabla_datos;
51 IF v_generada IS NOT NULL and v_tipo='externa' THEN
52 RAISE EXCEPTION 'ERROR no se puede % % , la tabla de datos "%" externa del operativo % ya fue generada', v_texto_op,v_texto_obj,v_tabla_datos, v_operativo;
53 END IF;
54 RETURN v_registro_salida;
55 ELSE
56 RAISE EXCEPTION 'ERROR Tabla "%" no considerada en "controlar_modificacion_generada_trg"',TG_TABLE_NAME;
57END CASE;
58END;
59$BODY$
60 LANGUAGE plpgsql ;
61--ALTER FUNCTION controlar_modificacion_generada_trg()
62-- OWNER TO procesamiento_owner;
63
64
65CREATE TRIGGER variables_controlar_modificacion_generada_trg
66 BEFORE UPDATE OR INSERT OR DELETE
67 ON variables
68 FOR EACH ROW
69 EXECUTE PROCEDURE controlar_modificacion_generada_trg();
70
71CREATE TRIGGER var_opciones_controlar_modificacion_generada_trg
72 BEFORE UPDATE OR INSERT OR DELETE
73 ON variables_opciones
74 FOR EACH ROW
75 EXECUTE PROCEDURE controlar_modificacion_generada_trg();
76
77CREATE TRIGGER tabla_datos_controlar_modificacion_generada_trg
78 BEFORE UPDATE
79 ON tabla_datos
80 FOR EACH ROW
81 EXECUTE PROCEDURE controlar_modificacion_generada_trg();
82
83
\No newline at end of file