gpt4 book ai didi

oracle - 如何使用 DBMS_SCHEDULER.CREATE_JOB 过程执行过程

转载 作者:行者123 更新时间:2023-12-02 09:00:17 24 4
gpt4 key购买 nike

我想创建一个在给定日期删除数据库对象的作业。作业创建正常,但程序未执行。尝试单独执行该过程并且有效。

这是创建作业的代码

v_jobnam := v_objnam; 
v_jobnam := DBMS_SCHEDULER.generate_job_name (v_jobnam);

v_startdate := to_timestamp(v_startdate);
select sysdate + (v_delhrs/1440)
into v_startdate
from dual;

DBMS_SCHEDULER.CREATE_JOB(job_name => v_jobnam, job_type => 'PLSQL_BLOCK', JOB_ACTION => 'BEGIN DROP_OBJ1(' || v_objnam|| ', ' || v_objtyp || ', '|| v_schema || ',' || v_objid ||'); END;', start_date => SYSTIMESTAMP, repeat_interval => 'freq=secondly; bysecond=0', end_date => NULL, enabled => TRUE, comments => 'Calls PLSQL once');

其中 v_delhrs 是一个数字。 这是该过程的代码:

  PROCEDURE DROP_OBJ1
(
p_objnam IN CHAR,
p_objtyp IN CHAR,
p_copyto IN ALL_OBJECTS.OWNER%TYPE,
p_objid IN NUMBER
)
IS

v_objnam VARCHAR2 (30);
v_objtyp VARCHAR2 (30);
v_copyto VARCHAR2 (30);
v_objid NUMBER (3);


BEGIN

v_objnam := UPPER (p_objnam);
v_objtyp := UPPER (p_objtyp);
v_copyto := UPPER (p_copyto);
v_objid := p_objid;
--v_copyby := UPPER (p_copyby);

EXECUTE IMMEDIATE ( ' DROP '
|| v_objtyp
|| ' '
|| v_copyto
|| '.'
|| v_objnam
);

EXECUTE IMMEDIATE ( ' DELETE FROM COPY_OBJ_DET WHERE OBJ_ID = '
|| v_objid
);


COMMIT;

END;

我知道这是一个非常小的问题。在此先感谢大师们。

干杯!

最佳答案

我觉得您在 DBMS_JOBS 设置调用中遗漏了一些引号。

试试这个:

DBMS_SCHEDULER.CREATE_JOB(job_name        => v_jobnam,
job_type => 'PLSQL_BLOCK',
JOB_ACTION => 'BEGIN DROP_OBJ1(''' || v_objnam
|| ''', ''' || v_objtyp || ''', '''
|| v_schema || ''',' || v_objid
|| '); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=secondly; bysecond=0',
end_date => NULL,
enabled => TRUE,
comments => 'Calls PLSQL once');

如果这不是解决方案,我会在数据库上设置您的代码并亲自尝试。

关于oracle - 如何使用 DBMS_SCHEDULER.CREATE_JOB 过程执行过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1769906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com