2012-10-04 32 views
0

我有以下過程,但沒有調度程序作業正在創建,並且在運行作業時找不到任何錯誤。我怎樣才能調試這個和代碼有什麼問題?過程不執行

CREATE OR REPLACE PROCEDURE test 
IS 
prod_no varchar2(32); 
prod_date date; 
employee varchar2(32); 
assurer varchar2(32); 
prod_description varchar2(32); 
prod_days number; 
assig varchar2(32); 
reg_no number; 
l_v number; 

BEGIN 

prod_no := '300'; 
prod_date := sysdate; 
employee := 'SAM'; 
assurer := 'MAT'; 
prod_description := 'test'; 
prod_days := 1; 
assig := 'A'; 
reg_no := 1; 

DBMS_SCHEDULER.create_job (
        job_name  => DBMS_SCHEDULER.generate_job_name ('FR'), 
        job_type  => 'PLSQL_BLOCK', 
        job_action  => 'BEGIN test_job(' 
             || i_prod_no 
             || ',''' 
             || prod_date 
             || ',''' 
             || employee 
             || ',''' 
             || assurer 
             || ',''' 
             || prod_description 
             || ',''' 
             || prod_days 
             || ',''' 
             || assig 
             || ',''' 
             || reg_no 
             || '''); end;', 
        start_date  => SYSDATE,     
        end_date  => NULL, 
        enabled   => TRUE, 
        comments  => 'test product' 
       ); 

    commit; 

exception 
when others then 

dbms_output.put_line (dbms_utility.format_error_stack); 
END test; 
/
+0

兩件事情要嘗試:(1)SET SERVEROUT ON; (2)擺脫不必要的異常處理程序。 –

+0

@JeffreyKemp我已經添加了'DBMS_OUTPUT.put_line('Products');'並且正在執行。 – user75ponic

回答

3

如果工作行爲在語法上不正確,您將不會收到任何警告,但您也不會得到任何工作。 這是您的語句:

BEGIN test_job(300,'04-OCT-12,'SAM,'MAT,'test,'1,'A,'1'); end; 

你缺少一些'關閉字符串值。

CREATE OR REPLACE PROCEDURE test 
IS 
prod_no varchar2(32); 
prod_date date; 
employee varchar2(32); 
assurer varchar2(32); 
prod_description varchar2(32); 
prod_days number; 
assig varchar2(32); 
reg_no number; 
l_v number; 
l_statement varchar2(32767); 

BEGIN 

prod_no := '300'; 
prod_date := sysdate; 
employee := 'SAM'; 
assurer := 'MAT'; 
prod_description := 'test'; 
prod_days := 1; 
assig := 'A'; 
reg_no := 1; 

l_statement := 'BEGIN test_job(' 
             || i_prod_no 
             || ',''' 
             || prod_date 
             || ',''' 
             || employee 
             || ',''' 
             || assurer 
             || ',''' 
             || prod_description 
             || ',''' 
             || prod_days 
             || ',''' 
             || assig 
             || ',''' 
             || reg_no 
             || '''); end;' 

dbms_output.put_line(l_statement); 

DBMS_SCHEDULER.create_job (
        job_name  => DBMS_SCHEDULER.generate_job_name ('FR'), 
        job_type  => 'PLSQL_BLOCK', 
        job_action  => l_statement, 
        start_date  => SYSDATE,     
        end_date  => NULL, 
        enabled   => TRUE, 
        comments  => 'test product' 
       ); 

    commit; 

exception 
when others then 

dbms_output.put_line (dbms_utility.format_error_stack); 
END test; 
/
+0

如何設置test_job中的值? 'BEGIN test_job(300,'04 -OCT-12,'SAM',MAT,'test','1','1');結束;' – user75ponic

+0

在將字符串變量傳遞給dbms_job.create_job之前,將其構建爲字符串變量並將其打印出來。我會編輯我的答案。 – Rene

+0

另一個問題是哪個表具有調度程序作業的細節,我嘗試在'dba_scheduler_programs'中查詢,但在創建不帶參數的作業調度程序時找不到。 – user75ponic