[英]How do I convert these SQL statements into more efficient statements
我有以下代碼:
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;
FOR X IN Q1 LOOP
PRESENT := FALSE;
FOR Y IN Q2 LOOP
IF (X.COL3 = Y.COL33) AND (X.COL4 = Y.COL44) THEN
PRESENT := TRUE;
EXIT;
END IF;
END LOOP;
IF NOT PRESENT THEN
UPDATE TABLE_X SET COL_A = 'Y';
COMMIT;
END IF;
END LOOP;
我不確定是否可以將此代碼轉換為 MERGE 語句或更有效的任何內容,如果是,請幫助我轉換此代碼。
提前感謝您的時間和幫助!
您只能創建一個游標並連接這兩個表。 然后,如果我理解正確,如果此游標中有任何數據,您可以更新 table_X。
declare
CURSOR Q1 IS
SELECT count(X.COL1)
FROM TABLE1 X
join TABLE2 Y
on X.COL3 = Y.COL33 AND X.COL4 = Y.COL44;
v_Q1 int := 0;
begin
open Q1;
fetch Q1 into v_Q1;
close Q1;
If v_Q1 > 0 then
UPDATE TABLE_X SET COL_A = 'Y';
end if;
end;
/
您可以使用NOT EXISTS
子句在單個UPDATE
語句中完成所有操作:
UPDATE TABLE_X
SET COL_A = 'Y'
WHERE NOT EXISTS (
SELECT 1
FROM TABLE1 x
INNER JOIN TABLE2 y
ON ( x.COL3 = y.COL33 AND x.COL4 = y.COL44 )
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.