Plsql 如何在没有参数的情况下设置dbms_作业
我试图使用dbms_作业并行运行一些过程,但在执行过程中遇到了一些问题。当试图运行下面的代码时,我遇到了这个错误Plsql 如何在没有参数的情况下设置dbms_作业,plsql,oracle10g,Plsql,Oracle10g,我试图使用dbms_作业并行运行一些过程,但在执行过程中遇到了一些问题。当试图运行下面的代码时,我遇到了这个错误 20:28:16 Info: Job #16 could not be executed. ORA-12011: execution of 1 jobs failed ORA-06512: at "SYS.DBMS_IJOB", line 469 ORA-06512: at "SYS.DBMS_JOB", line 282 ORA-06512: at line 1 p_e
20:28:16 Info: Job #16 could not be executed. ORA-12011: execution of 1 jobs failed
ORA-06512: at "SYS.DBMS_IJOB", line 469
ORA-06512: at "SYS.DBMS_JOB", line 282
ORA-06512: at line 1
p_ercode和p_erdesc是MY_PROC_1中的一个out参数。如果我试着把它注释掉,作业就会毫无问题地运行 我的问题是如何在不注释我的程序1中的p_ercode和p_erdesc的情况下运行作业 还有,有没有办法知道哪个作业正在运行,哪个作业已经完成?像警报之类的 也许这样行得通
declare
ln_dummy number;
p_stdate CONSTANT DATE := '01-MAY-2012';
p_edate CONSTANT DATE := '31-MAY-2012';
p_cdate CONSTANT DATE := '09-FEB-2013';
p_key CONSTANT INTEGER:= 0;
begin
COMMIT;
DBMS_JOB.SUBMIT(ln_dummy,'
declare
p_ercode INTEGER;
p_erdesc VARCHAR2(200);
begin
MY_PROC_1('''|| p_stdate ||''','''|| p_edate ||''','''|| p_cdate||''','''|| p_key ||''', p_ercode, p_erdesc );
end;
');
COMMIT;
end;
也许,这样行吗
declare
ln_dummy number;
p_stdate CONSTANT DATE := '01-MAY-2012';
p_edate CONSTANT DATE := '31-MAY-2012';
p_cdate CONSTANT DATE := '09-FEB-2013';
p_key CONSTANT INTEGER:= 0;
begin
COMMIT;
DBMS_JOB.SUBMIT(ln_dummy,'
declare
p_ercode INTEGER;
p_erdesc VARCHAR2(200);
begin
MY_PROC_1('''|| p_stdate ||''','''|| p_edate ||''','''|| p_cdate||''','''|| p_key ||''', p_ercode, p_erdesc );
end;
');
COMMIT;
end;
如果要记录输出,可以创建一个表:
SQL> create table log_table
2 (
3 job_id number,
4 start_time date,
5 end_time date,
6 retcode number,
7 retstr varchar2(4000)
8 )
9 /
Table created.
然后执行作业。我已经做了一个包装程序,只是为了让它更整洁一点,但如果你想的话,你可以把所有这些都放在工作中
SQL> create or replace procedure my_proc_1_job(
2 p_job number,
3 p_stdate date,
4 p_edate date,
5 p_cdate date,
6 p_key integer)
7 is
8 v_errcode integer;
9 v_errdesc varchar2(32767);
10 v_start_date date;
11 begin
12 v_start_date := sysdate;
13 my_proc_1(p_stdate, p_edate, p_cdate, p_key, v_errcode, v_errdesc);
14 insert into log_table (job_id, start_time, end_time, retcode, retstr)
15 values (p_job, v_start_date, sysdate, v_errcode, v_errdesc);
16 commit;
17 end;
18 /
Procedure created.
SQL> declare
2 ln_dummy number;
3 p_stdate CONSTANT varchar2(20) := '01-MAY-2012';
4 p_edate CONSTANT varchar2(20) := '31-MAY-2012';
5 p_cdate CONSTANT varchar2(20) := '09-FEB-2013';
6 p_key CONSTANT INTEGER:= 0;
7 begin
8 COMMIT;
9 DBMS_JOB.SUBMIT(
10 ln_dummy,
11 'my_proc_1_job(
12 JOB, to_date('''|| p_stdate ||''',''DD-MON-YYYY''),
13 to_date('''|| p_edate ||''',''DD-MON-YYYY''),
14 to_date('''|| p_cdate ||''',''DD-MON-YYYY''),
15 ' || p_key || ');');
16 COMMIT;
17 end;
18 /
PL/SQL procedure successfully completed.
SQL> select * from log_table;
JOB_ID START_TIM END_TIME RETCODE
---------- --------- --------- ----------
RETSTR
----------------------------------------------------------------------------------------------------
4 10-FEB-13 10-FEB-13 -1
failure
现在,所有运行都记录在
LOG\u表中
如果要记录输出,可以创建一个表:
SQL> create table log_table
2 (
3 job_id number,
4 start_time date,
5 end_time date,
6 retcode number,
7 retstr varchar2(4000)
8 )
9 /
Table created.
然后执行作业。我已经做了一个包装程序,只是为了让它更整洁一点,但如果你想的话,你可以把所有这些都放在工作中
SQL> create or replace procedure my_proc_1_job(
2 p_job number,
3 p_stdate date,
4 p_edate date,
5 p_cdate date,
6 p_key integer)
7 is
8 v_errcode integer;
9 v_errdesc varchar2(32767);
10 v_start_date date;
11 begin
12 v_start_date := sysdate;
13 my_proc_1(p_stdate, p_edate, p_cdate, p_key, v_errcode, v_errdesc);
14 insert into log_table (job_id, start_time, end_time, retcode, retstr)
15 values (p_job, v_start_date, sysdate, v_errcode, v_errdesc);
16 commit;
17 end;
18 /
Procedure created.
SQL> declare
2 ln_dummy number;
3 p_stdate CONSTANT varchar2(20) := '01-MAY-2012';
4 p_edate CONSTANT varchar2(20) := '31-MAY-2012';
5 p_cdate CONSTANT varchar2(20) := '09-FEB-2013';
6 p_key CONSTANT INTEGER:= 0;
7 begin
8 COMMIT;
9 DBMS_JOB.SUBMIT(
10 ln_dummy,
11 'my_proc_1_job(
12 JOB, to_date('''|| p_stdate ||''',''DD-MON-YYYY''),
13 to_date('''|| p_edate ||''',''DD-MON-YYYY''),
14 to_date('''|| p_cdate ||''',''DD-MON-YYYY''),
15 ' || p_key || ');');
16 COMMIT;
17 end;
18 /
PL/SQL procedure successfully completed.
SQL> select * from log_table;
JOB_ID START_TIM END_TIME RETCODE
---------- --------- --------- ----------
RETSTR
----------------------------------------------------------------------------------------------------
4 10-FEB-13 10-FEB-13 -1
failure
现在所有运行都记录在
LOG\u表中
这些输出参数将返回到哪里?程序。当作业实际运行时,调用submit_作业的功能将消失很久。您好,谢谢您的回复。我是plsql的新手。你有什么建议吗?请解释一下,如果你能使用这些参数,你想用它们做什么。一旦您这样做了,您应该能够自己决定要做什么。这两个参数都用于MY_PROC_1在执行时生成错误。它将在这些变量中分配错误代码和错误描述,并将它们插入到日志表中?那么你能做些什么呢?那些out参数将返回到哪里?程序。当作业实际运行时,调用submit_作业的功能将消失很久。您好,谢谢您的回复。我是plsql的新手。你有什么建议吗?请解释一下,如果你能使用这些参数,你想用它们做什么。一旦您这样做了,您应该能够自己决定要做什么。这两个参数都用于MY_PROC_1在执行时生成错误。它将在这些变量中分配错误代码和错误描述,并将它们插入到日志表中?那你能做些什么呢?太棒了!我不知道这是可能的。非常感谢你。这一个帮了我的忙!:)令人惊叹的!我不知道这是可能的。非常感谢你。这一个帮了我的忙!:)非常感谢。我一定要试试看。现在,埃戈尔的回答帮了我的忙。非常感谢。我一定要试试看。现在,埃戈尔的回答对我起了作用。