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

Posted

技术标签:

【中文标题】使用 oracle 数据注册一年中每个月的付款【英文标题】:regist payment for each month of the year using oracle data 【发布时间】:2010-01-26 05:16:11 【问题描述】:

我有以下表格:

员工具有级别(等级或 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中登记的收入*/。

我想创建一个函数,在每月的 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 的日期转换和日期函数的示例。

【问题讨论】:

系统如何知道员工仍然活跃?了解EMPLOYEESINCOME 表中的列会有所帮助。 是一列,SMALLINT,它被移除=如果它是活动的,则为0,否则为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,我想从 1 月 8 日开始,持续 30 天,直到 12 月。

我的程序是: 创建或替换过程 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;

结束;

【讨论】:

以上是关于使用 oracle 数据注册一年中每个月的付款的主要内容,如果未能解决你的问题,请参考以下文章

我有 8 年的日常数据。我想绘制一周中的每一天、一年中的每周和一年中的每个月的所有值。我怎么做?

注册免费试用12个月的亚马逊AWS云计算服务

查询以列表形式返回一年中每个月的天数?

使用 map reduce 程序查找一年中每个月的最高温度

统计一年中每个月的记录

我如何计算每个月的注册用户数?