0
更新されたテーブルを参照する2レベルのサブクエリでUPDATE文を実行しようとしていますが、エラーが発生しています。 次のコードを考慮してください。それは、テーブルc(更新されたテーブル)が最も深いサブクエリ内で見えないかのように私に "c.end_date invalid identifier"エラーを与えています。 サブクエリを1つのレベルのサブクエリだけにフラット化すると、その背後にあるロジックが失われます。Oracle SQL - 複数レベルの相関サブクエリが機能しない
これを書く方法に関するアイデアは、コンパイルして正しく動作するでしょうか?
私は、Oracle Database 10g Enterprise Editionのリリース10.2.0.3.0を使用している - のProd
create table calc(
agrmt_id number,
cust_num number,
prod_id number,
price number,
start_date date,
end_date date);
create table trans(
agrmt_id number,
cust_num number,
prod_id number,
units number,
trans_date date);
create table products(
prod_id number,
other_prc number,
prod_start date,
prod_end date);
update calc c set price = (with avg_price_per_prod as (select prod_id, avg(other_prc) avg_prc
from products
where prod_end >= c.start_date
and prod_start <= c.end_date
group by prod_id
) select sum(t.units) * a.avg_prc
from trans t, avg_price_per_prod a
where t.trans_date between c.start_date and c.end_date
and t.agrmt_id=c.agrmt_id
and t.cust_num=c.cust_num
and t.prod_id = a.prod_id
);