❶ 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('調度名','調度屬性','調度值');
至此,定時任務完成。
❷ 如何提高sql語句的執行效率
1、使用ordered提示
Oracle必須花費大量的時間來剖析多表的合並,用以確定表合並的最佳順序。SQL表達式涉及七個乃至更多的表合並,那麼有時就會需要超過30分鍾的時間來剖析,Ordered這個提示(hint)和其他的提示一起使用能夠產生合適的合並順序。
2、使用ordered_predicates
ordered_predicates提示在查詢的WHERE子句里指定的,並被用來指定布爾判斷(Booleanpredicate)被評估的順序。在沒有ordered_predicates的情況下,Oracle會使用下面這些步驟來評估SQL判斷的順序:子查詢的評估先於外層WHERE子句里的Boolean條件。
所有沒有內置函數或者子查詢的布爾條件都按照其在WHERE子句里相反的順序進行評估,即最後一條判斷最先被評估。每個判斷都帶有內置函數的布爾判斷都依據其預計的評估值按遞增排列。
3、限製表格合並評估的數量
提高SQL剖析性能的最後一種方法是強製取代Oracle的一個參數,這個參數控制著在評估一個查詢的時候,基於消耗的優化器所評估的可能合並數量。
(2)sql語句五分鍾執行一次擴展閱讀:
1、表設計的優化,數據行的長度不要超過8020位元組,如果超過這個長度的話在物理頁中這條數據會佔用兩行從而造成存儲碎片,降低查詢效率。
2、語句的查詢優化,保證在實現功能的基礎上,盡量減少對資料庫的訪問次數;
3、建立高效的索引創建索引一般有以下兩個目的:維護被索引列的唯一性和提供快速訪問表中數據的策略。
大型資料庫有兩種索引即簇索引和非簇索引,一個沒有簇索引的表是按堆結構存儲數據,所有的數據均添加在表的尾部,而建立了簇索引的表,其數據在物理上會按照簇索引鍵的順序存儲。個表只允許有一個簇索引。
4、強制查詢轉換,有時候oracle 的優化器未必能走正確的查詢路線,這個時候就需要添加一些hint 之類的來規定他的執行路線。當然了,這個未必是最好的處理方案。因為雖然現在走這個路線是對的,以為因為數據的變化到這這個HINT 變得不可取。
❸ 怎麼樣才能讓sql資料庫定期執行一句sql語句
create or replace procere MYPROCEDURE is
begin
UPDATE mac_vod SET vod_play_url= replace(vod_play_url, '第', '弟');
commit;
end MYPROCEDURE;
declare myjob number;
begin
DBMS_JOB.SUBMIT(
job => myjob,
what => 'myprocere;',
next_date => SYSDATE,
interval => 'sysdate+5/(24*60)');
commit;
end;
❹ 如何用plsql每隔5分鍾自動執行一次存儲過程
1,創建一個存儲過程
bb
作用是往pig表中插入數據
sql>
create
or
replace
procere
job_pro_test
as
2
begin
3
insert
into
job_test
values(sysdate);
4
end;
5
/
procere
created
2,創建一個job,名稱為job2010
;作用是每分鍾(60×24=1440)執行一次存儲過程job_pro_test。
sql>
variable
job2010
number;
sql>
begin
2
dbms_job.submit(:job2010,'job_pro_test;',sysdate,'sysdate+1/1440');
3
end;
4
/
❺ 如何讓sql每天執行一下一個寫好的sql語句
可以設置定時任務,比較常用的是用sqlserver 代理新建作業。有時候資料庫自動備份也是用的這個。
還有一種比較復雜自己寫個程序,使用系統定時任務 定時執行。
創建sql server定時任務作業步驟如下:
1.要先安裝了sqlserver 代理服務
--2.滑鼠右擊【SQL Server 代理】,選擇【啟動(S)】,如已啟動,可以省略此步驟;
--3.展開【SQL Server 代理】列表,右擊【作業】--【新建作業】;
--3.1 在【常規】選項卡中:
-- 輸入作業名稱,如My Job;
--3.2 在【步驟】選項卡中:
--3.2.1 點擊【新建】,輸入【步驟名稱】,如步驟1,類型默認T-SQL腳本,也可以選擇SSIS包等;
--3.2.2 在【資料庫】一欄選擇要作業處理的資料庫,在【命令】的右邊空白編輯欄輸入要執行的SQL代碼,
EXEC p_Name --如:執行一個P_Name的存儲過程
-- 也可以點擊命令下面的【打開】,打開.sql腳本;
--3.2.3 輸入運行腳本後,建議點擊【分析】,確保腳本語法正確,然後點擊下面的【確定】按鈕;
--3.3 在【計劃】選項卡中:
--3.3.1 點擊【新建】,輸入【計劃名稱】,如計劃1,計劃類型默認是重復執行,也可以選擇執行一次等;
--3.3.2 在【頻率】--【執行】處選擇每天、每周或每月,以每天為例,間隔時間輸入間隔幾天執行一次,
-- 下面還可以選擇每天一次性執行或間隔一定的時間重復執行
--3.3.3 在【持續時間】中選擇計劃開始執行的【起始日期】和【截止日期】,然後點擊【確定】按鈕;
--注意要將服務設置為自動啟動,否則在重啟伺服器後作業就不運行了。
--啟動代理服務的方法:
--開始--運行--輸入services.msc--找到【SQL Server 代理】的服務並雙擊--【啟動類型】選擇自動--【確定】
--至此,定時作業已創建完畢。
❻ sql server如何每10秒執行一條SQL語句
可以用
waitfor delay '000:00:10'
把這個放在要執行的語句之前,這樣過10秒鍾才會執行語句,結合循環操作就可以每10秒執行一次了。
這個最好和語句同時放在存儲過程中,執行完語句後,再調用存儲過程就可以實現循環了。
用作業調度一次就可以了,把exec p_ZQJ_YX710_I_test加在存儲過程最後,另外把while循環去掉,只要自己調用自己就可以了。另外最好設置一個配置表,在其中放置一個值用來確定是否要繼續循環下去,如果不想讓它循環下去,只要將那個配置值改一下。否則在重新啟動SQL SERVER服務之前,這個存儲過程會無限循環下去,一般是不好終止的。
create proc p_ZQJ_YX710_I_test
as
declare @d datetime
INSERT Runtime.dbo.history(TagName, QualityDetail, Value, DateTime)
SELECT rtrim(t1.name), 192,t1.curval,DATEADD(ss, t1.timestamp_high, '1970-01-01 08:00:00.000') AS Expr1
FROM scadasqltest.gzweb.dbo.analog t1 where t1.name ='ZQJ_YX710_I'
waitfor delay '00:00:10'--定義等待10秒
exec p_ZQJ_YX710_I_test
❼ postgresql sql 每隔5分鍾去執行一條sql語句怎麼寫用存儲過程嗎
這個要使用postgresql定時任務,類似oracle中的job,SQL Server中的代理(agent)。
需要安裝pgagent插件,然後建立job就定時執行了。具體要參考pgagent插件的使用。
❽ 如何隨時執行一段SQL代碼
能不能開放一個文本框,可以修改sql,然後將sql保存到資料庫,再在軟體上做個按鈕查詢資料庫的這個sql,後執行?
❾ java中讓Sql語句5秒鍾執行一次
可以用定時器,spring中就有網路下Spring定時器,會有很多關於定時器的文章。如果不是用spring的,就自己寫一個隨項目啟動的servlet或者filter,在init方法里直接寫一個Timer