解答例 - 実習課題3 - 13.3.ストアドプロシージャの利用
実習課題 3
販売データベースのテーブル accept_order 中のデータで、支払い金額の平均値、最大値、最小値を別のテーブルに書き込むストアドプロシージャを定義しなさい。
- このストアドプロシージャを実行したときに書き込まれるデータは、通し番号、支払い金額の平均値、最大値、最小値及びテーブルにデータを書き込んだ日である。
- 支払い金額は 6章実習課題 2 を参考にすること。
- このストアドプロシージャの定義は ORACLE 上で行うものとする。
解答例
CREATE SEQUENCE summary_seq; CREATE TABLE order_summary ( num NUMBER PRIMARY KEY, average NUMBER, max NUMBER, min NUMBER, summary_date DATE ); CREATE PROCEDURE log_summary IS TYPE summary_t is RECORD (average NUMBER, max NUMBER, min NUMBER); summary summary_t; BEGIN SELECT AVG(p.price * (100 - a.dc_rate) / 100 + a.option_price), MAX(p.price * (100 - a.dc_rate) / 100 + a.option_price), MIN(p.price * (100 - a.dc_rate) / 100 + a.option_price) INTO summary FROM accept_order a NATURAL JOIN product p; INSERT INTO order_summary VALUES ( summary_seq.nextval, summary.average, summary.max, summary.min, CURRENT_DATE); END;