У меня есть 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.
Есть ли более эффективный способ сравнения и обновления?
Большое спасибо за потраченное время и помощь заранее!