Как отладить процедуру, которая не может обновить столбец таблицы в Oracle? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть 2 независимых запроса, которые обновляют значение в 4 переменных NUMBER

DSL_HOUR_DIVISOR NUMBER (10);
ELEC_HOUR_DIVISOR NUMBER(10);
DSL_HOUR_DIVIDEND NUMBER(10);
ELEC_HOUR_DIVIDEND NUMBER(10);



SELECT SUM(SUB_SUB_ITEM_VALUE_DSL) AS SUB_SUB_ITEM_VALUE_DSL,
       SUM(SUB_SUB_ITEM_VALUE_ELEC) AS SUB_SUB_ITEM_VALUE_ELEC
  INTO DSL_HOUR_DIVIDEND,ELEC_HOUR_DIVIDEND 
  FROM (SELECT ITEM_NO,
               SUB_ITEM_NO,
               SUB_SUB_ITEM_NO,
               SUM(SUB_SUB_ITEM_VALUE_DSL) AS SUB_SUB_ITEM_VALUE_DSL,
               SUM(SUB_SUB_ITEM_VALUE_ELEC) AS SUB_SUB_ITEM_VALUE_ELEC
          FROM REPORT.DY_SUM_DLY_DAILY
         WHERE REPORT_DATE>='01-Mar-2020'
           AND REPORT_DATE<='07-Mar-2020'
           AND SUB_ITEM_NO=5.01
         GROUP BY ITEM_NO,
                  SUB_ITEM_NO,
                  SUB_SUB_ITEM_NO);   

SELECT SUM(SUB_SUB_ITEM_VALUE_DSL) AS SUB_SUB_ITEM_VALUE_DSL,
       SUM(SUB_SUB_ITEM_VALUE_ELEC) AS SUB_SUB_ITEM_VALUE_ELEC
  INTO DSL_HOUR_DIVISOR,ELEC_HOUR_DIVISOR 
  FROM (SELECT ITEM_NO,
               SUB_ITEM_NO,
               SUB_SUB_ITEM_NO,
               SUM(SUB_SUB_ITEM_VALUE_DSL) AS SUB_SUB_ITEM_VALUE_DSL, 
               SUM(SUB_SUB_ITEM_VALUE_ELEC) AS SUB_SUB_ITEM_VALUE_ELEC
          FROM REPORT.DY_SUM_DLY_DAILY
         WHERE REPORT_DATE>='01-Mar-2020'
           AND REPORT_DATE<='07-Mar-2020'
           AND SUB_ITEM_NO IN (5.04,5.05) 
         GROUP BY ITEM_NO, SUB_ITEM_NO, SUB_SUB_ITEM_NO);

UPDATE REPORT.GBL_TMP_SUMMARY_CNT A
   SET CY_DSL_CNT=ROUND(DSL_HOUR_DIVIDEND/DSL_HOUR_DIVISOR*100,2),
       CY_ELEC_CNT=ROUND(ELEC_HOUR_DIVIDEND/ELEC_HOUR_DIVISOR*100,2) 
 WHERE A.ITEM_NO=5
   AND A.SUB_ITEM_NO=5.06
   AND A.SUB_SUB_ITEM_NO='B';
COMMIT;  

Я попытался отладить код, проверив, присваивается ли какое-либо значение этим 4 переменным, я даже проверил вычисление процента, которое обновляет столбец, и всем 4 переменным присваивается значение. Это были напечатанные значения

5.06 b DSL_HOUR_DIVIDEND---------------5555187
5.06 b ELEC_HOUR_DIVIDEND---------------6923284
5.06 b DSL_HOUR_DIVISOR---------------5575697
5.06 b ELEC_HOUR_DIVISOR---------------6937356
5.06 b Current year Diesl % ---------------99.63
5.06 b Current year Electric % ---------------99.8

Но в таблице GBL_TMP_SUMMARY_CNT значения не обновляются, пожалуйста, сообщите мне, как решить эту проблему. Оба столбца CY_DSL_CNT & CY_ELEC_CNT имеют тип NUMBER (10,2) .

1 Ответ

0 голосов
/ 03 мая 2020

У меня не так много go здесь, но есть разница в ваших WHERE предложениях между вашими select и вашими update заявлениями.

Ваше 1-е предложение where SUB_ITEM_NO=5.01, а ваш 2-й SUB_ITEM_NO IN (5.04,5.05).

Тем не менее, ваши обновления where:

WHERE A.ITEM_NO=5
AND A.SUB_ITEM_NO=5.06
AND A.SUB_SUB_ITEM_NO='B'

Это немного противоречит мне, но я не знаю ваших business logi c.

Я бы попробовал использовать select, используя приведенные выше пункты, чтобы увидеть, действительно ли вы получаете какие-либо строки назад.

Если нет, то обновлять нечего.

-- does this return any rows???
SELECT *
FROM REPORT.GBL_TMP_SUMMARY_CNT A
WHERE A.ITEM_NO=5
   AND A.SUB_ITEM_NO=5.06
   AND A.SUB_SUB_ITEM_NO='B';
...