2012-10-04 30 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