oracle定時執行sql
『壹』 我想定時讓 oracle 執行一段sql語句 怎麼做
如:定時刪除三分鍾前的數據
###1.創建存儲過程
SQL>createorreplaceprocerepro_delete_aas
2begin
3deletefromatwheret.a<(sysdate-3/1440);###一天1440分鍾。即一分鍾是1/1440
4end;
5/
Procerecreated
###2創建job
SQL>variablejob_pro_delete_anumber;
SQL>begin
2dbms_job.submit(:job_pro_delete_a,'pro_delete_a;',sysdate,'sysdate+3/1440');
3end;
4/
PL/
job_pro_delete_a
---------
127
###3.調用job
SQL>begin
2dbms_job.run(:job_pro_delete_a);
3end;
4/
PL/
job_pro_delete_a
---------
127
###4.刪除job
SQL>begin
2dbms_job.remove(:job_pro_delete_a);
3end;
4/
Ps:select*fromuser_jobs;
dbms_job.remove(ID);
『貳』 ORACLE資料庫怎麼做定時執行操作
1.create table test(id int,starttime date,state int);
2.create or replace procere sp_update is
cursor cur is select * from test where state=0;
v_id int;
v_starttime date;
v_state int;
begin
open cur;
loop
fetch cur into v_id,v_starttime,v_state;
exit when cur%notfound;
update test set state=1 where starttime=sysdate;
commit;
end loop;
close cur;
end;
/
3.創建JOB
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1,sp_update;',sysdate,'sysdate+1/1440'); --每天1440分鍾,即一分鍾運行sp_update過程一次
3 end;
4 /
PL/SQL 過程已成功完成。
運行JOB
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
『叄』 Oracle資料庫中把SQL存在CLOB欄位中 ,現需對其定時執行,通過存儲過程對其執行報錯
CLOB這個類型就是使用CHAR來保存數據的,把nvarchar類型數據插入到oracle對應的CLOB類型中只要加個to_char()轉換下就可以了
『肆』 oracle定時執行SQL語句的存儲過程幫我看下有什麼問題
create or replace procere proc_auto_exec_job is
job number;
begin
『伍』 oracle寫一個定時執行的sql語句,JOB也行
關於定期執行的計劃任務,oracle中可以通過dbms_scheler包中的自帶的存儲過程進行實現;如果需要將查詢結果存入指定的目錄,需要考慮數據轉換,相對復雜,一般通過前端軟體實現;
『陸』 Oracle中存儲過程如何設置等待特定時長之後再執行sql
oraclejob有定時執行的功能,可以在指定的時間點或每天的某個時間點自行執行任務。。
每秒鍾執行次Interval=>sysdate+1/(24*60*60),如果改成sysdate+10/(24*60*60)就是10秒鍾執行,每分鍾執行Interval=>TRUNC(sysdate,'mi')+1/(24*60)如果改成TRUNC(sysdate,'mi')+10/(24*60)就是每10分執行次每天定時執行例如:每天的凌晨1點執行Interval=>TRUNC(sysdate)+1+1/(24)。
『柒』 oracle 定時每天將查詢的結果當作sql來執行
建立一個procere,procere中使用動態sql。
然後創建個job,就可以了。
『捌』 Oracle中如何定時執行一條SQL語句
通過網上查詢,找到一種方案,就是先在oracle裡面對要定時的sql寫成存儲過程,再用DBMS_scheler對存儲過程進行定時執行。
在資料庫中新建了一個表MY_JOB_TEST
在資料庫中新建了一個表MY_JOB_TEST
在資料庫中新建了一個表MY_JOB_TEST
在PLSQL中,執行下面語句模擬存儲過程的調用,執行後要點提交才有反應
[sql] view plain
BEGIN
INSERTINTOMY_JOB_TEST(NUM)VALUES(1);
END;
GrantCreateJobTo指定用戶名
SQL>CREATEORREPLACEPROCEDURE
JOB_TEST
BEGIN
INSERTINTOMY_JOB_TEST(NUM)VALUES(1);
END;
- (此處要執行存儲過程不能用exec JB_TEST,這種執行方式只能在命令行中使用)
SQL>BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'SCHEDULER_TEST',
job_type=>'STORED_PROCEDURE',
job_action=>'JOB_TEST',
start_date=>sysdate,
repeat_interval=>'FREQ=MINUTELY;INTERVAL=1');
END;
- 但是這樣子定時任務並不會執行。
SQL>SELECT*FROMUSER_SCHEDULER_JOBS;
- 此時我們可以看到enable的狀態是false的,因此我們需要去啟動定時任務
SQL>BEGIN
DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');
然後下面建立一個存儲過程JOB_TEST
(注意,這里用戶需要CREATE JOB許可權,可以用超級管理員用戶執行下面語句給指定用戶賦予該許可權)
[sql] view plain
[sql] view plain
使用DBMS_SCHEDULER進行定時,這里為每分鍾執行一次
[sql] view plain
我們可以用下面的命令查看一下scheler的狀態
[plain] view plain
[plain] view plain
dbms_scheler.enable('j_test'); --啟用jobs
dbms_scheler.disable('j_test'); --禁用jobs
dbms_scheler.run_job('j_test'); --執行jobs
dbms_scheler.stop_job('j_test'); --停止jobs
dbms_scheler.drop_job('j_test'); --刪除jobs
然後再查詢job的enable裝態,發現為true了。
然後查看MY_JOB_TEST表,發現每分鍾會往裡面添加記錄。
當需要修改定時任務或者調度的其他屬性時,可以用下面的
dbms_scheler.set_attribute('調度名','調度屬性','調度值');
至此,定時任務完成。
『玖』 如何使用oracle存儲過程執行外部的sql腳本文件
你把腳本內容直接在存儲過程中實現,然後利用job去定時調度就好了。