Advertisement
pveselov

merge_agrio

Jan 7th, 2015
541
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION PUBLIC.merge_agrio(ver            NUMERIC,
  2.                                               tag            NUMERIC,
  3.                                               blockidin     NUMERIC,
  4.                                               rowdatein      CHARACTER VARYING,
  5.                                               countnew NUMERIC,
  6.                                               eventsnew      NUMERIC,
  7.                                               deventsnew     NUMERIC,
  8.                                               durationnew    NUMERIC,
  9.                                               devtype        NUMERIC,
  10.                                               placementin    NUMERIC,
  11.                                               unservednew    NUMERIC,
  12.                                               unconfirmednew NUMERIC)
  13.   RETURNS NUMERIC
  14. LANGUAGE plpgsql
  15. AS $FUNCTION$
  16. DECLARE
  17.   last_id NUMERIC;
  18. BEGIN
  19.   IF ver IS NOT NULL
  20.   THEN
  21.     DELETE FROM R_AGRIO /*!IDX*/
  22.     WHERE tagid = tag AND blockid = blockidin AND version < ver;
  23.   ELSE
  24.     ver = 1;
  25.   END IF;
  26.   LOOP
  27.     UPDATE R_AGRIO/*!IDX*/
  28.     SET
  29.       IMPRESSIONS = IMPRESSIONS + countnew,
  30.       count      = count + eventsnew,
  31.       dcount     = dcount + deventsnew,
  32.       duration    = duration + durationNew,
  33.       unserved    = unserved + unservedNew,
  34.       unconfirmed = unconfirmed + unconfirmedNew
  35.     WHERE
  36.       tagid = tag AND
  37.       blockid = blockidin AND
  38.       rowdate = rowdateIn AND
  39.       device_type = devType AND
  40.       placement = placementIn
  41.     RETURNING id
  42.       INTO last_id;
  43.     IF FOUND
  44.     THEN
  45.       RETURN last_id;
  46.     END IF;
  47.     BEGIN
  48.       INSERT INTO R_AGRIO/*!IDX*/
  49.       (VERSION, TAGID, blockid, ROWDATE, DEVICE_TYPE, PLACEMENT, UNSERVED, UNCONFIRMED, IMPRESSIONS, count, dcount, DURATION, ID)
  50.       VALUES
  51.         (ver, tag, blockidin, rowdateIn, devType, placementIn, unservedNew,
  52.          unconfirmedNew, countnew, eventsnew, deventsnew, durationNew,
  53.          NEXTVAL('SEQAGRIO'));
  54.       RETURN lastval();
  55.       EXCEPTION WHEN unique_violation
  56.       THEN
  57.     END;
  58.   END LOOP;
  59. END;
  60. $FUNCTION$
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement