1

我有以下表格:

  • 具有级别的员工(您可以称之为等级或 wtv):income_value、id 等。
  • INCOME存储排名与收入值(非常微小且静态)
  • 具有以下列的 REGIST_INCOME表:
    • ID_REG;
    • ID_EMPLOYEE;
    • MONTH_and_Year_OF_PAYMENT DATE(我想格式化为 yy.mm);
    • DATE_OF_PAYMENT 日期(格式 yy.mm.dd);
    • 收入; /*这等于INCOME中登记的收入*/。

我想创建一个函数,在每月的 ax 日生成注册表/行。
像这样:在每年的第 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 中我想点击一个按钮来获取当前日期并将其放入 PAYMENT DATE。基本上,我想“自动”生成注册,然后只确认付款日期。

我会欣赏一个专注于 oracle 的日期转换和日期函数的示例。

4

1 回答 1

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)但不能这样,因为它总是 8Jan+30,我想在 8Jan 和持续 30 天,直到 12 月。

我的程序是:创建或替换程序 regIncomePerMonth

cursor activeemps 是 select f.id_pessoa, f.escalao, s.salario_actual from funcionario f , salario s where f.removed != 1 and 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;

结尾;

于 2010-01-26T06:18:58.137 回答