① oracle中存儲過程執行很長時間,用了三個游標。
不用看執行計劃都知道慢了,
for c1
for c2
for c3
這種沒有任何條件的三重循環的時間復雜度為C1記錄數*C2記錄數*C3記錄數,你得盡量減少循環次數,能用sql就不要用游標循環了
② oracle定時執行存儲過程的時間區間問題
目測, 你的存儲過程, 需要在 下面這些時刻運行:
1:00
3:00
5:00
7:00
16:00
18:00
20:00
22:00
CREATE OR REPLACE PROCEDURE other_proc
AS
vHour VARCHAR(2);
BEGIN
vHour := TO_CHAR(SYSDATE, 'HH24');
IF vHour = '01' OR vHour = '03' OR vHour = '05' OR vHour = '07'
OR vHour = '16' OR vHour = '18' OR vHour = '20' OR vHour = '22' THEN
-- 調用你那個存儲過程.
-- 由於沒有代碼, 暫時寫 NULL;
NULL;
END IF;
END;
/
variable jobno number;
begin
dbms_job.submit(:jobno, 'other_proc;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')');
commit;
end;
/
③ oracle存儲過程執行速度很慢是什麼原因
解決辦法:你需要對你的表根據查詢條件設計相應的索引,有時候根據需要可能一個表你需要建立好幾個索引都是有可能的。然後再執行,你會發現原來要30幾秒的現在零點幾秒就可以搞定了,這跟使用游標沒什麼關系。游標的使用完全由你的應用需要決定,我相信能不用的你肯定不會選擇使用游標處理,一般是實在沒辦法的情況下才選擇游標去做。 你查詢慢的原因是你在存儲過程中執行的話,沒有索引時,他會一條一條查知道把80幾萬條數據全部掃描一遍直到查完了你才看到一個結果,但是你在外面單獨執行很快的原因是plsql他會首先去查查到幾條數據就先給你返回來,所以你馬上就看到結果了,但實際上查詢也並沒有結束,你要是數據很多的情況下你往下拉,你會發信很慢,其實查詢過程根本就還沒有結束。 總之寫存儲過程第一步是會寫,第二步是要做好優化,否則當你的數據量很大的時候你的過程寫的不好的話問題會馬上暴露出來
④ Oracle資料庫的存儲過程怎麼寫
Oracle存儲過程基本語法:
CREATEORREPLACEPROCEDURE存儲過程名
IS
BEGIN
NULL;
END;
解釋:
行1:
CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;
行2:
IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:
BEGIN關鍵詞表明PL/SQL體的開始。
行4:
NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;
行5:
END關鍵詞表明PL/SQL體的結束。
⑤ Oracle 延時執行問題求指教:
使用dbms_lock.sleep(10);實現延時,本句子是等待10秒鍾,具體想等待的時間,你可以從表中查詢,再使用參數傳遞,即可實現。
⑥ ORACLE 存儲過程是什麼 它的用處,好處是什麼概念性的東西多點。。
定義:存儲過程(Stored Procere )是一組為了完成特定功能的SQL 語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。
存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。在ORACLE 中,若干個有聯系的過程可以組合在一起構成程序包。
優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。
簡單說,你在你的機器上寫了個存儲過程,這個存儲過程像那些表裡的數據一樣被放在遙遠的資料庫伺服器當中,但是它又是可執行的代碼,其他能連到資料庫伺服器的用戶,可以調用你寫的存儲過程
它的作用是隱藏細節,就是說,你寫的存儲過程代碼可能很復雜,但是其他人調用它卻很簡單,不用具體知道它是如何做的,且一次能完成多個指令
oracle有系統存儲過程和自定義存儲過程2種存儲過程。
系統存儲過程就是由oracle預先提供的一組完成特定功能的存儲過程,安裝完oracle就有了。
自定義存儲過程就是存在oracle資料庫里由一組plsql語句組成的自定義過程(procere)。它可以供其它oracle自定義存儲過程、自定義函數和job調用或者由客戶端程序調用。
⑦ oracle 怎麼存儲過程在執行中等待5秒
dbms_lock.sleep(5000)
⑧ oracle資料庫存儲過程執行慢時如何優化
在oracle中
不關是執行sql還是存儲過程,當你第一次執行的時候需要對相關語句進行相關許可權、對象等分析,這個過程會產生執行計劃,叫做硬解析,如果分析通過,之後將語句轉化成ascii等效數字碼,再通過hash演算法得到散列值,然後檢查庫緩存中是否存在同樣hash值的語句。
如果存在,就是軟解析.然後就執行語句得出結果.所以第一次執行的時候要是硬解析,速度較慢,而第二次已經以後多次執行的時候是軟解析,速度較快.大概就這樣
如果要詳細說
這東西幾個鍾頭都說不完的.
⑨ ORACLE存儲過程執行很慢!
你把你的游標拿出來,看一下執行計劃,如果游標都慢的話,那就考慮是否加索引,先讓游標執行效率通過再看過程里的具體SQL。我加你的SQL看看。
⑩ Oracle 存儲過程 問題:
這個最簡單的方法,但會出現一些問題
update trainingclass set trianingplanid = (DEPARTMENT_SEQ.currval) where id like T_PlanDetail;
用這種方式試一下
update trainingclass set trianingplanid = (DEPARTMENT_SEQ.currval) where ','||to_char(id)||',' like 『,』||T_PlanDetail||',';