2014-02-20 16 views
0

甲骨文數據庫管理系統的工作,我有以下程序在調度/ SQL deveoper

create or replace 
procedure test_vinod_cur 
is 
cursor emp_cur is select * from test_vino ; 
emp_rec test_vino%rowtype; 
BEGIN 
open emp_cur; 
loop 
fetch emp_cur into emp_rec; 
EXIT WHEN EMP_CUR%NOTFOUND; 

insert into test_vino_id values (emp_rec.emp_id,emp_rec.emp_name); 
end loop; 
CLOSE EMP_CUR; 
commit work; 
END; 

知道怎樣才能在SQL Developer的窗口中DBMS的工作安排這一過程,使得它將於上午九時天天跑。另外,如果工作失敗,我怎麼能找到。

有什麼建議嗎?

感謝

+0

你需要使用DBMS_SCHEDULER.SUBMIT_JOB功能 – Incognito

+0

但是你可以給我的語法。由於有很多不同的解決方案 –

+0

檢查有人在下面發佈的答案,所以無法從在線來源不知情。他舉了一個創造工作的例子。 – Incognito

回答

1
exec dbms_scheduler.create_job(
     job_name  => 'INSERT_VINO', 
     job_type  => 'STORED_PROCEDURE', 
     job_action  => 'test_vinod_cur', 
     repeat_interval => 'freq=daily;byhour=9;byminute=00', 
     end_date  => NULL, 
     enabled   => TRUE); 

注意:的SQL * Plus將運行上面的,因爲你不能在多行存儲過程調用(但我認爲它更容易在這個答案,看我的SQL客戶端沒有這個限制)。
不知道SQL Developer,但如果失敗,請嘗試將整個exec調用放在一行中。

更多關於dbms_scheduler包的細節可以在手冊中找到:
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#CIHHBGGI


有關程序A的單詞。光標方法是高度效率低,速度慢且不可擴展。你的程序可以重新寫入沒有環或光標:

create or replace procedure test_vinod_cur 
is 
BEGIN 
    insert into test_vino_id (emp_id, emp_name) 
    select emp_id, emp_name 
    from test_vino; 
    commit work; 
END; 
/

這將是更快。指定insert into ...部分中的目標表的所有列也是很好的編碼習慣。

+0

你好,我認爲這個DBMS調度程序...但我期望DBMS作業 –

+0

@VinodChelladurai:''dbms_job'已棄用,不應再使用。 –