ORACLE 中user_jobs调用 存储过程

ORACLE 中user_jobs调用 存储过程,第1张

你这个就是我给你写的吧?

在里边执行下边的,把下边这些放到job里:

DECLARE

on_flag NUMBER

out_reason VARCHAR2(4000)

BEGIN

-- Now call the stored program

sp_create_table(on_flag,out_reason)

-- Output the results

:a0 := on_flag

:a1 := out_reason

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line(SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1, 255))

RAISE

END

对了,还不行的话你就换个工具,换toad,找到job,时间设置好了

还有,大妹子,你分真多,哈

不好意思啊,我这老报一个ora-01008的错误,没弄明白

---------------------------------------------------------------------

OK,解决,那些乱七八糟的要绑定变量,程序和执行的你都改一下吧

程序改成:

create or replace PROCEDURE SP_CREATE_TABLE

(

on_flag OUT NUMBER,

out_reason OUT VARCHAR2

)

is

v_sql varchar2(2000)

v_now_date varchar2(8)

v_table_name varchar2(3)

begin

select to_char(sysdate,'yyyymmdd') into v_now_date from dual

select 'xin' into v_table_name from dual

v_sql :='create table '||v_table_name||''||v_now_date||' as select * from abc'

EXECUTE IMMEDIATE v_sql

commit

EXCEPTION

WHEN OTHERS

THEN

on_flag := SQLCODE

out_reason := SUBSTR (SQLERRM, 1, 255)

ROLLBACK

END

程序执行体改成:

DECLARE

on_flag NUMBER

out_reason VARCHAR2(4000)

BEGIN

-- Now call the stored program

sp_create_table(on_flag,out_reason)

END

应该是万无一失了,再有问题留言吧

在你的存储过程里面定义一个变量:

v_HH24 CHAR(2) := '00'

begin后面给变量赋值:

v_HH24 := to_char(sysdate, 'HH24')

然后在你执行的代码外面加上:

IF v_HH24 = '02' THEN

你的代码

end if

然后使用下面的脚本创建job:

begin

sys.dbms_job.submit(job =>:job,

what =>'你的存储过程名字',

next_date =>to_date('01-06-2013 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),

interval =>'SYSDATE+60/1440')

commit

end

/

将下面的存储过程名称换成实际的存储过程名称,就可以实现您要的功能的,

现为你写的,直接在pl/sql dev里面执行就行了,有啥问题再联系我。

上面一段是删除job,后面的是建立job,我写了判断语句,可以随意执行

参考oracle的 dbms_job包。

---------------------华丽丽的分割线----------------------------

DECLARE

i_count number

job_num number

BEGIN

select count(job) into i_count from user_jobs where upper(what)='存储过程名称'

if i_count>0 then

select job into job_num from user_jobs where upper(what)='存储过程名称'

dbms_job.remove(job_num)

end if

END

/

commit

DECLARE X NUMBER

BEGIN

DBMS_JOB.SUBMIT

( job      => X

,what      => '存储过程名称'

,next_date => to_date(to_char(sysdate+1,'yyyy-mm-dd')||' 01:00:00','yyyy-mm-dd hh24:mi:ss')

,interval  => 'SYSDATE+1'

,no_parse  => TRUE

)

END

/

commit


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11718114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存