Сравнение 2 сложных запросов и обновление другой таблицы на основе результатов сравнения - PullRequest
0 голосов
/ 04 марта 2020

У меня есть 2 сложных запроса, которые возвращают тот же тип и такое же количество столбцов, что и его вывод.

ВЫХОД QUERY1:

-------------------------------------------
| COL1 | COL2 | COL3 | COL4 | COL5 | COL6 |
-------------------------------------------

ВЫХОД QUERY2:

-------------------------------------------------
| COL11 | COL22 | COL33 | COL44 | COL55 | COL66 |
-------------------------------------------------

Я хочу обновить COL_A в TABLE_X, когда:

QUERY1.COL3 == QUERY2.COL33 AND

QUERY1.COL4 == QUERY2.COLL44 AND

QUERY1.COL5 == QUERY2.COLL55 AND

(QUERY1.COL6 == 0) AND (QUERY2.COL66 IS NOT NULL)

Я попробовал следующее:

CREATE OR REPLACE PROCEDURE DEMO AS

  CURSOR Q1 IS
    SELECT COL1, COL2, COL3, COL4, COL5, COL6 FROM TABLE1;

  CURSOR Q2 IS
    SELECT COL11, COL22, COL33, COL44, COL55, COL66 FROM TABLE2;

  PRESENT BOOLEAN;

  BEGIN
    FOR X IN Q1 LOOP
     PRESENT := FALSE;
     FOR Y IN Q2 LOOP
      IF (X.COL3 = Y.COL33) AND (X.COL4 = Y.COL44) AND (X.COL5 = Y.COL55) AND (X.COL6 = 0 AND Y.COL66 IS NOT NULL) THEN
        PRESENT := TRUE;
        EXIT;
      END IF;
     END LOOP;

     IF PRESENT THEN
        UPDATE TABLE_X SET COL_A = 'Y';
        COMMIT;
     END IF;
   END LOOP;

END DEMO;
/

Даже если условия удовлетворяют, он не выполняет операторы, заключенные в основной оператор IF.

Есть ли более эффективный способ сравнения и обновления?

Большое спасибо за потраченное время и помощь заранее!

...