当前位置:首页 » 存储配置 » oraclejob执行存储过程

oraclejob执行存储过程

发布时间: 2023-03-21 10:51:02

㈠ 如何让oracle job定时调用一个有参的存储过程

/*
查询:
select job,broken,what,interval,t.* from user_jobs t;
job job的唯一标识,自动生成的
broken 是否处于运行状态,N;运行;Y:停止
what 存储过程名称
next_date 初次执行时间
interval 执行周期

删除:
begin dbms_job.remove(jobno); end;
根据what的内容确定其对应的job,并如此执行删除

执行时间例子:
描述 INTERVAL参数值
每天午夜12点 ''TRUNC(SYSDATE + 1)''
每天早上8点30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12点 ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每个月第一天的午夜12点 ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每个季度最后一天的晚上11点 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6点10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''
每3秒钟执行一次 'sysdate+3/(24*60*60)'
每2分钟执行一次 'sysdate+2/(24*60)'

1:每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行
interval => 'sysdate+1/(24*60)' --每分钟执行
interval => 'sysdate+1' --每天
interval => 'sysdate+1/24' --每小时
interval => 'sysdate+2/24*60' --每2分钟
interval => 'sysdate+30/24*60*60' --每30秒
2:每天定时执行
Interval => TRUNC(sysdate+1) --每天凌晨0点执行
Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1点执行
Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60) --每天早上8点30分执行
3:每周定时执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24 --每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,1))+2/24 --每周一凌晨2点执行
4:每月定时执行
Interval =>TTRUNC(LAST_DAY(SYSDATE)+1) --每月1日凌晨0点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 --每月1日凌晨1点执行
5:每季度定时执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') --每季度的第一天凌晨0点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24 --每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 --每季度的最后一天的晚上11点执行
6:每半年定时执行
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 --每年7月1日和1月1日凌晨1点
7:每年定时执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 --每年1月1日凌晨1点执行

相关方法:
修改要执行的操作:dbms_job.what(jobno,'sp_fact_charge_code;'); --修改某个job名
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);

㈡ 各位大神们,我想在oracle后台执行多个存储过程,请问要怎么做呢

你是需要定时执行吗?你说的后台执行应该就是存储过程自动执行吧:
1、定时执行你可以创建job,可以定时每个多久执行一次存储过程(job中可以执行多个存储过程,只需要使用‘;’隔开);
2、你可以将你所有的存储过程打包(pkg);

㈢ oracle数据库job怎么调用含参数的存储过程

dbms_job.submit(test_job_really,'test_jobproce("zhangsan");',sysdate,'sysdate+1/1440');

改为:
dbms_job.submit(test_job_really,'test_jobproce(''zhangsan'');',sysdate,'sysdate+1/1440');

注意:zhangsan的两边,不是双引号,是两个单引号!

如有帮助,请采纳!

㈣ Oracle数据库job,调用存储过程,PLsql工具执行后,没有报错,但是也没有任何效果,哪位大神帮忙分析一下

SQL> create or replace procere test_jobproce as
2
3 begin
4
5 insert into test_job values(sysdate);
6
7 end test_jobproce;
8
9 /

警告: 创建的过程带有编译错误。

SQL> show errors;
PROCEDURE TEST_JOBPROCE 出现错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
5/1 PL/SQL: SQL Statement ignored
5/13 PL/SQL: ORA-00942: 表或视图不存在
SQL> create table test_job (t1 date);

表已创建。

SQL> create or replace procere test_jobproce as
2
3 begin
4
5 insert into test_job values(sysdate);
6
7 end test_jobproce;
8 /

过程已创建。

SQL> declare test_job_really number;
2 begin
3 dbms_job.submit(test_job_really,'test_jobproce;',sysdate,'sysdate+1/1440')

4 commit;
5 end;
6 /

PL/SQL 过程已成功完成。

SQL> rpitn :test_job_really;
SP2-0734: 未知的命令开头 "rpitn :tes..." - 忽略了剩余的行。
SQL> print :test_job_really;
SP2-0552: 未声明绑定变量 "TEST_JOB_REALLY"。
SQL> desc dba_jobs;
名称 是否为空? 类型
----------------------------------------- -------- ---------------------------

JOB NOT NULL NUMBER
LOG_USER NOT NULL VARCHAR2(30)
PRIV_USER NOT NULL VARCHAR2(30)
SCHEMA_USER NOT NULL VARCHAR2(30)
LAST_DATE DATE
LAST_SEC VARCHAR2(8)
THIS_DATE DATE
THIS_SEC VARCHAR2(8)
NEXT_DATE NOT NULL DATE
NEXT_SEC VARCHAR2(8)
TOTAL_TIME NUMBER
BROKEN VARCHAR2(1)
INTERVAL NOT NULL VARCHAR2(200)
FAILURES NUMBER
WHAT VARCHAR2(4000)
NLS_ENV VARCHAR2(4000)
MISC_ENV RAW(32)
INSTANCE NUMBER

SQL> select job ,what from dba_jobs;

JOB
----------
WHAT
-------------------------------------------------------------------------------

4001
wwv_flow_cache.purge_sessions(p_purge_sess_older_then_hrs => 24);

4002
wwv_flow_mail.push_queue(wwv_flow_platform.get_preference('SMTP_HOST_ADDRESS'),

wv_flow_platform.get_preference('SMTP_HOST_PORT'));

3
test_jobproce;

JOB
----------
WHAT
-------------------------------------------------------------------------------

SQL> exec dbms_job.run(3);

PL/SQL 过程已成功完成。

SQL> select * from test_job
2 ;

T1
--------------
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14

SQL> exec dbms_job.run(3);

PL/SQL 过程已成功完成。

SQL> /

T1
--------------
05-3月 -14
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14
05-3月 -14

SQL> exec dbms_job.run(3);

PL/SQL 过程已成功完成。

SQL> /

T1
--------------
05-3月 -14
05-3月 -14
05-3月 -14
05-3月 -14

SQL>

㈤ oracle job使用 我想数据库每隔十分钟执行一次存储过程A,怎么写,本人小白,没用过job,想大神们求解

begin
sys.dbms_job.submit(job => :job, -- job编号
what => 'dbms_output.pub_line(''asdf'');', -- 执行脚本,换成你的存储过程
next_date => to_date('17-01-2011 16:17:31', 'dd-mm-yyyy hh24:mi:ss'), -- 下次执行时间
interval => 'trunc(sysdate)+10/24/60'); -- 执行时间间隔10min
commit;
end;
/

㈥ oracle查看存储过程 jobs 是否被执行过

首先你要检查一下该jobs是否已Broken,通过select *
from dba_jobs语句查看Next_Date是否为差扮4000/1/1,Broken是否为Y,然后看FAILURES的次数是否大于0,如果jobs为Broken状态那肯定不会执行,携坦
Oracle中可以查看执行的时间Total_Time,你可以留心如果Total_Time一直未变化辩庆桐的话那么Jobs也就未执行。
希望能帮到你。

㈦ oracle数据库job怎么调用含参数的存储过程

lz你好,job调用的存储过程不能是带参数的,只能是无参数的存储过程,所以what那里不对的哦。

㈧ ORACLE 中user_jobs调用 存储过程

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

在里边执行下边的,把下边这些放到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 al;
select 'xin' into v_table_name from al;

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;

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

㈨ 请问oracle怎么执行存储过程

我试验过了,就是exec 存储过程名或者execute 存储过程名(参数),请你在仔细确认一下,你的存储过程名写没写对呀,或者你没有进入sqlplus中?

----
以上,希望对你能有帮助。

㈩ oracle定时执行怎么执行多个存储过程

定时执行存储过程,需要在job里定义;而执行多个存储过程,则在job中定义多次即可。

运行环境:oracle 10g

1、定义其中一个job

declare
jobnonumber;
begin
dbms_job.submit(11,
what=>'pro_bdc_bh(
to_char(add_months(trunc(sysdate),-1),''yyyy''),
to_char(add_months(trunc(sysdate),-1),''MM''),
''true''
);',
next_date=>sysdate,
Interval=>'TRUNC(sysdate)+1+2/(24)');
commit;
end;

注意:其中pro_bdc_bh为存储过程名称,TRUNC(sysdate) + 1 +2 / (24)为定义的运行时间为每日凌晨2点。

2、然后定义另外一个job

declare
jobnonumber;
begin
dbms_job.submit(11,
what=>'p_test(
to_char(add_months(trunc(sysdate),-1),''yyyy''),
to_char(add_months(trunc(sysdate),-1),''MM''),
''true''
);',
next_date=>sysdate,
Interval=>'TRUNC(sysdate)+1+2/(24)');
commit;
end;

注意:这次运行的存储过程名为p_test,运行时间同样为每日凌晨2点。

3、创建job完成后,可通过具有创建job的账号查询创建是否成功,语句如下:

select*fromuser_jobs;
热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:944
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:741
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372