私の使用のために新しい表を作成しました。これには8列のt1があります。私はプロシージャを介して3つの列に値を設定しました。列1は名前です。今度は、対応する名前の4番目の列に値を設定します。これはwhere句で更新されます。別の表から1つの表を更新する
このシナリオでは、名前とtotal_amountを持つt2を呼び出す結果を持つクエリを作成しました。今度は、total_amountをt1の4番目の列に設定します。
私が今行っているアプローチは、t1の各名前をループし、t2(句付き)のカウンタtotal_amountを見つけてt1の値を更新することです。しかし、それは無限の時間を費やしている。第1に、t1のルーピングのためです。第2に、t2自体が何度も何度も実行されているクエリです。
実際の作業ははるかに複雑で、私はちょうどその要点を提供しました。速いアプローチを私に提案してください。
create or replace procedure proc
is
temp_value number(18,2);
CURSOR total is
select name, age, sex from data_table where
{conditions};
/*Gives me name and age in 1st and 2nd column and likewise data in 3rd column */
begin
FOR temp IN total LOOP
with aa as (SELECT b.name,
NVL (SUM (c.amount), 0) as total_amount
FROM data_table2 b, data_table3 c
WHERE {joins and groub by}
)
/* This gives me total amount for corresponding name. There is no repetition of name */
select nvl(sum(total_amount),0) into temp_value from aa where name = temp.name;
update t1 set amount = temp_value where name = temp.name;
END LOOP;
END;
/
ここでMySQL、MS SQL ServerまたはOracleを使用していますか?関与していない製品にタグを付けないでください。 – jarlh
スキーマで表を表現できますか? – anatol
@jarlhここでOracleを使用しています。申し訳ありませんタグの – Akshay