如何将这些 SQL 语句转换为更高效的语句
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 )
);
我有以下代码:
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 )
);