зарегистрировать платеж за каждый месяц года, используя данные оракула

У меня есть следующие таблицы:

  • Сотрудники с уровнем (ранг или wtv, как вы можете его назвать): доход_значение, идентификатор и т. д.
  • ДОХОД, в котором хранится рейтинг по сравнению со значением дохода (очень жесткая и статическая)
  • REGIST_INCOME table with the following columns:
    • ID_REG;
    • ID_EMPLOYEE;
    • MONTH_and_Year_OF_PAYMENT DATE (я хочу отформатировать в гг.мм);
    • DATE_OF_PAYMENT DATE (формат гг.мм.дд);
    • ДОХОД; /*который равен доходу, зарегистрированному в ДОХОДЕ */.

Я хочу создать функцию, которая генерирует реестр/строку в x-й день месяца.
Что-то вроде этого: каждое 8-е число года добавляйте строку в таблицу REGIST_INCOME для каждого активного сотрудника (он же все еще работает):

ID_REG | ID_EMPLOYEE  | MONTH_and_Year_OF_PAYMENT | PAYMENT DATE
--------------------------------------------------------------------
1      | 121          | 10.01                     | NULL
2      | 20345        | 10.01                     | NULL 

... и так далее...

Я хочу что-то простое, потому что в Java я хочу нажать кнопку, которая извлекает текущую дату и помещает ее в ДАТУ ОПЛАТЫ. По сути, я хочу генерировать регистрации «автоматически», а затем подтверждать только дату платежа.

Я был бы признателен за пример с акцентом на преобразование даты оракула и функции даты.


person neverMind    schedule 26.01.2010    source источник
comment
Как система узнает, что сотрудник все еще активен? Было бы полезно знать столбцы в таблицах EMPLOYEES и INCOME.   -  person OMG Ponies    schedule 26.01.2010
comment
Столбец SMALLINT, он удаляется = 0, если он активен, иначе 1.   -  person neverMind    schedule 26.01.2010


Ответы (1)


Я создал или пытался создать регулярное запланированное задание, подобное этому:

declare
  lv_job number;
  lv_proc varchar2(1000);
  begin_date   DATE := to_date('10.01.08');
  begin
  lv_proc:='begin regIncomePerMonth; end;';
  dbms_job.submit(lv_job,
  lv_proc,
  begin_date,
  'begin_date+30'
  );
  dbms_output.put_line('the job created with job number: '|| lv_job);
  exception
  when others then
  dbms_output.put_line('error'||sqlcode||sqlerrm);
end;

(см. http://oracle.ittoolbox.com/documents/regularly-scheduled-plsql-procedure-14568), но это не может быть так, потому что это всегда будет 8 января + 30, и я хочу начать в 8 января и продолжать с шагом 30 дней до декабря.

и моя процедура: создать или заменить процедуру regIncomePerMonth

курсор activeemps выбирается f.id_pessoa, f.escalao, s.salario_actual из funcionario f , salario s, где f.removed != 1 и f.escalao = s.escalao;

начинать

for emp in activeemps loop
    INSERT INTO registo_salarial values(S_REGISTO_SALARIAL.nextval,emp.id_pessoa,
    trunc(sysdate,'MM'),emp.salario_actual,NULL);
end loop;

конец;

person neverMind    schedule 26.01.2010