使用oracle数据注册一年中每个月的付款

时间:2010-01-26 05:16:11

标签: sql oracle datetime plsql plsqldeveloper

我有以下表格:

  • 员工级别(您可以称之为rank或wtv):income_value,id等。
  • 收入,用于存储排名与收入值(非常小和静态)
  • REGIST_INCOME 表,其中包含以下列:
    • ID_REG;
    • ID_EMPLOYEE;
    • MONTH_and_Year_OF_PAYMENT DATE(我想格式化为yy.mm);
    • DATE_OF_PAYMENT DATE(格式为yy.mm.dd);
    • 收入; / *等于在INCOME * /中登记的收入。

我想创建一个在一个月中的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中我想点击一个获取当前日期的按钮并将其放入PAYMENT DATE。基本上,我想“自动”生成注册,然后确认付款日期。

我很感激一个关注oracle日期转换和日期函数的例子。

1 个答案:

答案 0 :(得分: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天内一直持续到12月。

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

cursor 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;

端;