當前位置:首頁 » 存儲配置 » 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 瀏覽:945
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372