Advertisement
VoronVU

Untitled

Apr 6th, 2016
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MEMBER FUNCTION getBalance(Acc NUMBER,
  2.                            Obj NUMBER DEFAULT NULL,
  3.                            bDt DATE DEFAULT NULL,
  4.                            eDt DATE DEFAULT NULL,
  5.                            rw  NUMBER DEFAULT NULL) RETURN NUMBER IS
  6. num    NUMBER;
  7. ROW    NUMBER := NVL(rw, SELF.transID);
  8. bDate  DATE;
  9. eDate  DATE;
  10. BEGIN
  11. bDate := NVL(bDt,SYSDATE - 365*200);
  12. eDate := NVL(eDt,SYSDATE);
  13. --+index(money_dist XIF3MONEY_DIST)  по CLIENT_ID
  14.   IF Obj IS NULL THEN
  15.     IF ROW IS NOT NULL THEN
  16.       SELECT SUM(trans_sum) INTO num
  17.       FROM  (SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  18.                     trans_sum
  19.              FROM   money_dist
  20.              WHERE  client_id   = clientID
  21.              AND    debet       = Acc
  22.              AND    log_id     <= ROW
  23.                  UNION ALL
  24.              SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  25.                     -trans_sum
  26.              FROM   money_dist
  27.              WHERE  client_id   = clientID
  28.              AND    credit      = Acc
  29.              AND    log_id     <= ROW);
  30.     ELSE
  31.       SELECT SUM(trans_sum) INTO num
  32.       FROM  (SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  33.                     trans_sum
  34.              FROM   money_dist
  35.              WHERE  client_id   = clientID
  36.              AND    debet       = Acc
  37.              AND    trans_date BETWEEN bDate AND eDate
  38.                  UNION ALL
  39.              SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  40.                     -trans_sum
  41.              FROM   money_dist
  42.              WHERE  client_id   = clientID
  43.              AND    credit      = Acc
  44.              AND    trans_date BETWEEN bDate AND eDate);
  45.     END IF;
  46.   ELSE
  47.     IF ROW IS NOT NULL THEN
  48.       SELECT SUM(trans_sum) INTO num
  49.       FROM  (SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  50.                     trans_sum
  51.              FROM   money_dist
  52.              WHERE  client_id   = clientID
  53.              AND    debet       = Acc
  54.              AND    debet_id    = Obj
  55.              AND    log_id     <= ROW
  56.                  UNION ALL
  57.              SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  58.                     -trans_sum
  59.              FROM   money_dist
  60.              WHERE  client_id   = clientID
  61.              AND    credit      = Acc
  62.              AND    credit_id   = Obj
  63.              AND    log_id     <= ROW);
  64.     ELSE
  65.       SELECT SUM(trans_sum) INTO num
  66.       FROM  (SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  67.                     trans_sum
  68.              FROM   money_dist
  69.              WHERE  client_id   = clientID
  70.              AND    debet       = Acc
  71.              AND    debet_id    = Obj
  72.              AND    trans_date BETWEEN bDate AND eDate
  73.                  UNION ALL
  74.              SELECT /*+index(money_dist XIF3MONEY_DIST)*/
  75.                     -trans_sum
  76.              FROM   money_dist
  77.              WHERE  client_id   = clientID
  78.              AND    credit      = Acc
  79.              AND    credit_id   = Obj
  80.              AND    trans_date BETWEEN bDate AND eDate);
  81.     END IF;
  82.   END IF;
  83.  
  84.   RETURN ROUND(NVL(num,0),2);
  85. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement