2010-01-26 21 views
1

我有以下表格:記數支付

  • 員工與級別(級別或WTV你可以稱呼它):income_value,ID等
  • 收入存儲的排名與收益值(非常尖細,靜態)
  • REGIST_INCOME表具有以下的列:
    • ID_REG;
    • ID_EMPLOYEE;
    • MONTH_and_Year_OF_PAYMENT DATE(我想格式化爲yy.mm);
    • DATE_OF_PAYMENT DATE(format yy.mm.dd);
    • 收入;/*等於收入中記錄的收入* /。

我想創建生成當月的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中我想單擊一個按鈕來獲取當前日期並將其放入付款日期。基本上,我想「自動」生成註冊,然後確認付款日期。

我將不勝感激一個關注oracle的日期轉換和日期函數的例子。

+0

系統如何知道員工仍然活躍?這將有助於瞭解「EMPLOYEES」和「收入」表中的列。 – 2010-01-26 05:34:47

+0

是一個列SMALLINT,如果它處於活動狀態,則將其移除= 0,否則爲1。 – neverMind 2010-01-26 06:13:32

回答

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,和我想從8月開始,一直持續30天,直到12月。

,我的程序是: 創建或替換程序regIncomePerMonth

光標activeemps是 選擇f.id_pessoa,f.escalao,從funcionario˚Fs.salario_actual ,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; 

端;