Будет полезно, если вы разместите образцы данных, а также то, что должен делать someprocedure
. Я догадываюсь, что он вставляет эти значения в table2
, но - что здесь делает дата? Понятия не имею, поэтому я его опускаю.
Я бы предложил процедуру, которая принимает (хотя бы один) параметр: par_contract_id
. Это делает процедуру многоразовой ; с жестко запрограммированными значениями вы можете использовать его только один раз (т.е. с этим жестко запрограммированным набором значений).
Примерно так:
SQL> create or replace procedure proc1 (par_contract_id in number) as
2 begin
3 insert into table1 (currency_id, amt_total_exp)
4 select s.currency_id,
5 sum(s.amount_direct_exposure)
6 from sometable s
7 where s.contract_id = par_contract_id
8 group by s.currency_id;
9 end;
10 /
Procedure created.
Предположим, что sometable
выглядит так:
SQL> select * from sometable;
CONTRACT_ID AMOUNT_DIRECT_EXPOSURE CURRENCY_ID
----------- ---------------------- -----------
1 100 225
1 500 225
2 200 382
Передавая contract_id = 1
процедуре, она должна суммировать 100 + 500
и вставить строку в table1
:
SQL> begin
2 proc1(1);
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> select * from table1;
CURRENCY_ID AMT_TOTAL_EXP
----------- -------------
225 600
SQL>