Найдите разницу в количестве строк table1 между источниками S1 и S2 и обновите table2 - PullRequest
0 голосов
/ 15 декабря 2018

TABLE1

call_ID PARAM_CT status
------- -------- -------------    
C001     3         NULL

TABLE2

+---------+---------+----------+----------+------------------+---------+    
| seq_ID  | REQ_ID  | CALL_ID  | SELL_ID  |     REGION       |  NUMBER|    
+---------+---------+----------+----------+------------------+---------+    
|    1    |    123  | C001     | S1       | ABC              |  510563 |    
|    2    |    123  | C001     | S1       | EFG              |  122967 |    
|    3    |    123  | C001     | S1       | HIJ              |  614106 |    
|    4    |    123  | C001     | S2       | ABC              |  510563 |    
|    5    |    123  | C001     | S2       | ERG              |  122967 |    
|    6    |    123  | C001     | S2       | HIJ              |  614106 |
+---------+---------+----------+----------+------------------+---------+

Ниже приведен код, который я использую, чтобы найти разницу в количествестроки между источниками S1 и S2.Пожалуйста, дайте мне знать, если это можно оптимизировать.

DECLARE vPARAM_CT VARCHAR(10) ;
DECLARE vSOURCE1 VARCHAR(10) ;
DECLARE vSOURCE2 VARCHAR(10) ;
BEGIN
SELECT PARAM_CT into vPARAM_CT FROM table1 WHERE call_id='C001' ;
SELECT COUNT(*) INTO vSOURCE1 FROM table2 WHERE call_id='C001' AND SOURCE='S1';
SELECT COUNT(*) INTO vSOURCE2 FROM table2 WHERE call_id='C001' AND SOURCE='S2'; 
IF (vPARAM_CT=vSOURCE1 AND vSOURCE2=vPARAM_CT ) THEN
BEGIN
  UPDATE table1 SET RUN_STATUS='COMPLETED' WHERE call_id='C001' ;
END;
ELSE
BEGIN
UPDATE table1 SET RUN_STATUS='COMPLETE WITH MISSING COUNTRY CODE' WHERE call_id='C001'  ;
END;
END IF;
END;

1 Ответ

0 голосов
/ 15 декабря 2018

Прежде всего вам нужно написать declare только один раз для блока кода PLSQL и вернуть результаты агрегирования count в числовой параметр типа.

Затем объедините ваши операторы selectв один и для if блоков, как показано ниже:

DECLARE 
   v_cnt     pls_integer;
   v_call_id varchar2(10) := 'C001';
BEGIN

 select count(*) 
   into v_cnt
   from
     ( select call_id,
              sum(case when source = 'S1' then 1 else 0 end ) as s1,
              sum(case when source = 'S2' then 1 else 0 end ) as s2
         from table2
        group by call_id 
     ) t2
         join table1 t1 on t1.param_ct = t2.s1 and t1.param_ct = t2.s2
        where call_id = 'C001';

  IF ( v_cnt > 0 ) THEN
    UPDATE table1 SET RUN_STATUS='COMPLETED' WHERE call_id=v_call_id ;
  ELSE
    UPDATE table1 SET RUN_STATUS='COMPLETED WITH MISSING COUNTRY CODE' WHERE call_id=v_call_id  ;
  END IF;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...