Чтобы конкретизировать ответ @ Мата, я думаю, что вы хотите что-то вроде этого:
create or replace procedure update_train_distance(p_train_id trains.id%type,
p_distance trips.distance%type) is
begin
update trains
set distancetraveled = nvl(distancetraveled,0)+p_distance
where id = p_train_id;
end update_train_distance;
begin
dbms_scheduler.create_program('sched_train_update',
'STORED_PROCEDURE',
'UPDATE_TRAIN_DISTANCE',
2,
TRUE);
dbms_scheduler.define_program_argument('sched_train_update',
1,
'p_train_id',
'VARCHAR2',
'0');
dbms_scheduler.define_program_argument('sched_train_update',
2,
'p_distance',
'NUMBER',
0);
end;
create or replace trigger trips_sched_ai
after insert on trips
for each row
begin
dbms_scheduler.create_job(job_name => 'TRIP_' || :new.id,
program_name => 'sched_train_update',
start_date => :new.enddate,
auto_drop => true);
dbms_scheduler.set_job_argument_value(job_name => 'TRIP_' || :new.id,
argument_name => 'p_train_id',
argument_value => :new.trainid);
dbms_scheduler.set_job_argument_value(job_name => 'TRIP_' || :new.id,
argument_name => 'p_distance',
argument_value => :new.distance);
dbms_scheduler.enable('TRIP_' || :new.id);
end trg_trips_sched;
Вы должны иметь в виду, что это непроверенный пример и что могут быть вещи, которые я пропустил,Как минимум, вам, вероятно, нужно добавить триггеры для обработки обновления или удаления до выполнения задания.