/sql/Function/reports_set_add_info.sql

http://cupsfilter.googlecode.com/ · SQL · 45 lines · 35 code · 7 blank · 3 comment · 3 complexity · 953252320217a94849d24ab5637ad6b6 MD5 · raw file

  1. --DROP FUNCTION reports_set_add_info (integer,character varying,character varying);
  2. CREATE OR REPLACE FUNCTION reports_set_add_info (integer,character varying,character varying)
  3. RETURNS INTEGER AS
  4. $BODY$
  5. DECLARE
  6. find_id INTEGER;
  7. addinfo_id INTEGER;
  8. rep_id ALIAS for $1;
  9. field_key ALIAS for $2;
  10. field_val ALIAS for $3;
  11. BEGIN
  12. find_id = (SELECT id FROM reports WHERE id = rep_id);
  13. IF (find_id IS NULL) THEN
  14. INSERT INTO debug_log (inf_str) VALUES ('?????? ??????? ??????. ? ??????? reports ?? ?????????? ?????? ? ??????????? ?? ??????? cups_data_log ?????? N='||rep_id);
  15. RETURN 0;
  16. END IF;
  17. -- ???? ???????? recivers
  18. addinfo_id = (SELECT id FROM add_info WHERE tag_key = field_key and tag_value = field_val);
  19. IF (addinfo_id IS NULL) THEN
  20. INSERT INTO add_info (tag_key,tag_value) VALUES (field_key,field_val);
  21. addinfo_id = (SELECT id FROM add_info WHERE tag_key = field_key and tag_value = field_val);
  22. END IF;
  23. -- ????????? ??????? ??????
  24. UPDATE rel_add_info2reports SET add_info_id=addinfo_id,reports_id=find_id;
  25. IF (FOUND) THEN
  26. RETURN 1;
  27. END IF;
  28. BEGIN
  29. INSERT INTO rel_add_info2reports (add_info_id,reports_id) VALUES (addinfo_id,find_id);
  30. RETURN 1;
  31. EXCEPTION WHEN unique_violation THEN -- do nothing, and loop to try the UPDATE again
  32. RETURN 0;
  33. END;
  34. END;
  35. $BODY$
  36. LANGUAGE 'plpgsql' VOLATILE
  37. COST 100;
  38. ALTER FUNCTION reports_set_add_info (integer,character varying,character varying) OWNER TO postgres;