Advertisement
Valik888

Untitled

Jan 12th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 3.14 KB | None | 0 0
  1.     -- FIRST
  2.     SELECT COUNT(*)
  3.         INTO first_clause
  4.         FROM n_accountservice na
  5.         WHERE na.account_id = given_id
  6.             AND na.service_id BETWEEN 101 AND 126;
  7.     IF first_clause > 0 THEN
  8.         DBMS_OUTPUT.put_line('[ok]eсть 101..126 услуга, идём дальше');  
  9.     ELSE
  10.         DBMS_OUTPUT.put_line('[BREAK]нет 101..126 услуг');
  11.     END IF;
  12.  
  13.     -- SECOND если хоть одна 100я услуга по даному аккаунту имеет вид 2 - юзер имеет субсидию
  14.     FOR service_ IN service_cur LOOP
  15.         SELECT COUNT(*) INTO second_clause FROM n_payments p WHERE
  16.         p.account_id = given_id AND p.service_id = service_.service_id AND vid = 2;
  17.         IF second_clause > 0 THEN
  18.             DBMS_OUTPUT.put_line('[BREAK]хотя бы одна 100я услуга по даному аккаунту имеет вид 2');
  19.         ELSE
  20.             DBMS_OUTPUT.put_line('[ok]ни одна 100я услуга по даному аккаунту не имеет вида 2');
  21.         END IF;
  22.     END LOOP;  
  23.    
  24.     -- THIRD                       n_accountservice
  25.     FOR service_ IN (SELECT * FROM n_balances        n WHERE n.account_id = given_id ) LOOP
  26.         IF service_.service_id = 901 OR service_.service_id = 902 THEN
  27.             isrestruct := TRUE;
  28.             SELECT
  29.                 NVL(SUM(b.summ), 0) INTO factsaldo
  30.                 FROM
  31.                 n_balances b
  32.                 WHERE b.account_id = given_id
  33.                 AND   b.DATA = ADD_MONTHS(TRUNC(given_month,'mm'),-1);
  34.             SELECT
  35.                 NVL(SUM(rservice.summa_pay), 0) INTO calcSaldo
  36.                 FROM
  37.                 n_restructuring_service rservice
  38.                 WHERE rservice.account_id = given_id
  39.                     AND rservice.DATE_END >= ADD_MONTHS(TRUNC(given_month,'mm'),-1);
  40.  
  41. --              dbms_output.put_line('factsaldo '||factsaldo||', calcSaldo '||calcSaldo);
  42.         END IF;
  43.     END LOOP;
  44.         IF isrestruct = FALSE THEN
  45.             DBMS_OUTPUT.put_line('[ok]никакой реструкторизации');
  46.         ELSE
  47.             IF calcsaldo <= factsaldo THEN
  48.                 DBMS_OUTPUT.put_line('[ok]реструктуризация, n_balances <= factsaldo '||calcsaldo||' <= '||factsaldo);
  49.             ELSE
  50.                 DBMS_OUTPUT.put_line('[BREAK]реструктуризация, calcsaldo > factsaldo '||calcsaldo||' > '||factsaldo);
  51.             END IF;
  52.         END IF;
  53.     -- FOUR Проверяем оплату до 20 числа прошлого месяца
  54.         SELECT NVL(SUM(p.summ),0) INTO saldo FROM n_payments p
  55.         WHERE   p.account_id = given_id
  56.             AND p.service_id  =100
  57.             AND (p.vid = 1 OR p.vid = 9)
  58.             AND TRUNC(p.DATA, 'mm') = TRUNC(given_month, 'mm')  -- текущий -1 месяц
  59.             AND EXTRACT(DAY FROM  p.DATA) <= 20;                -- берём отплаты до 20го числа включительно
  60.            
  61.         SELECT NVL(SUM(nb.summ), 0) INTO payment FROM n_balances nb
  62.         WHERE nb.account_id = given_id
  63.             AND nb.service_id BETWEEN 101 AND 126
  64.             AND TRUNC(nb.DATA,'mm') = ADD_MONTHS(TRUNC(given_month,'mm'), -1); 
  65.         IF (payment - saldo) <= 0 THEN
  66.             DBMS_OUTPUT.put_line('[ok]разница платежа и сальдо <= 0! ('||payment||' - '||saldo||'='||(payment-saldo)||')');
  67.         ELSE
  68.             DBMS_OUTPUT.put_line('[BREAK]разница платежа и сальдо > 0! ('||payment||' - '||saldo||'='||(payment-saldo)||')');
  69.         END IF;
  70.  
  71. END ten_percent_sale;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement