Advertisement
Guest User

Untitled

a guest
May 30th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.08 KB | None | 0 0
  1.  
  2. CREATE OR REPLACE FUNCTION PUBLIC.validate_service_realization()
  3.   RETURNS TRIGGER AS
  4. $BODY$
  5. DECLARE
  6.     can_takes_urgent_orders BOOLEAN;
  7.     can_executes_service BOOLEAN := FALSE;
  8. BEGIN
  9.     SELECT dt.takes_urgent_orders
  10.     INTO can_takes_urgent_orders
  11.     FROM department_type dt
  12.     JOIN department d ON NEW.department_id = d.id AND d.department_type_id = dt.id;
  13.  
  14.     IF (NEW.urgent=TRUE AND can_takes_urgent_orders=FALSE) THEN
  15.         RAISE EXCEPTION 'Department with id % can not takes urgent orders', NEW.department_id;
  16.     END IF;
  17.  
  18.     SELECT COUNT(*)
  19.     INTO can_executes_service
  20.     FROM department_type_services dts
  21.     WHERE dts.department_types_id = NEW.department_id AND dts.services_id = NEW.service_id;
  22.  
  23.     IF (can_executes_service = FALSE) THEN
  24.         RAISE EXCEPTION 'Department with id % can not executes service with id %', NEW.department_id, NEW.service_id;
  25.     END IF;
  26.  
  27.     RETURN NEW;
  28. END;
  29. $BODY$
  30.   LANGUAGE plpgsql VOLATILE;
  31.  
  32. CREATE TRIGGER before_insert_service_realization_validation
  33.   BEFORE INSERT
  34.   ON PUBLIC.service_realization
  35.   FOR EACH ROW
  36.   EXECUTE PROCEDURE validate_service_realization();
  37.  
  38. CREATE TRIGGER before_update_service_realization_validation
  39.   BEFORE UPDATE
  40.   ON PUBLIC.service_realization
  41.   FOR EACH ROW
  42.   EXECUTE PROCEDURE validate_service_realization();
  43.  
  44.  
  45. ----------------------------------------------------------------------------
  46.  
  47.  
  48. CREATE OR REPLACE FUNCTION PUBLIC.validate_department()
  49.   RETURNS TRIGGER AS
  50. $BODY$
  51. DECLARE
  52.     executor_executor_id INTEGER;
  53. BEGIN
  54.     SELECT d.executor_id
  55.     INTO executor_executor_id
  56.     FROM department d
  57.     WHERE d.id = NEW.executor_id;
  58.    
  59.     IF (executor_executor_id != NEW.executor_id) THEN
  60.         RAISE EXCEPTION 'Department with id % can not be executor', NEW.executor_id;
  61.     END IF;
  62.  
  63.     RETURN NEW;
  64. END;
  65. $BODY$
  66.   LANGUAGE plpgsql VOLATILE;
  67.  
  68. CREATE TRIGGER before_insert_department_validation
  69.   BEFORE INSERT
  70.   ON PUBLIC.department
  71.   FOR EACH ROW
  72.   EXECUTE PROCEDURE validate_department();
  73.  
  74. CREATE TRIGGER before_update_department_validation
  75.   BEFORE UPDATE
  76.   ON PUBLIC.department
  77.   FOR EACH ROW
  78.   EXECUTE PROCEDURE validate_department();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement