1. 程式人生 > >909422229_oracle儲存過程與函式、定時器

909422229_oracle儲存過程與函式、定時器

技術交流群:958923746,有學習視訊,文件等。

零、儲存過程定義:儲存過程在我們的工作中經常使用,具有很多的優點,下面彙總一下。【百度到的比較細緻】

       1. 執行速度:對於很簡單的sql,儲存過程沒有什麼優勢。對於複雜的業務邏輯,因為在儲存過程建立的時候,資料庫已經對其進行了一次解析和優化。儲存過程一旦執行,在記憶體中就會保留一份這個儲存過程,這樣下次再執行同樣的儲存過程時,可以從記憶體中直接呼叫,所以執行速度會比普通sql快。    

  2.  減少網路傳輸:儲存過程直接就在資料庫伺服器上跑,所有的資料訪問都在資料庫伺服器內部進行,不需要傳輸資料到其它伺服器,所以會減少一定的網路傳輸。但是在儲存過程中沒有多次資料互動,那麼實際上網路傳輸量和直接sql是一樣的。而且我們的應用伺服器通常與資料庫是在同一內網,大資料的訪問的瓶頸會是硬碟的速度,而不是網速。

  3. 可維護性:的儲存過程有些時候比程式更容易維護,這是因為可以實時更新DB端的儲存過程。  有些bug,直接改儲存過程裡的業務邏輯,就搞定了。 

  4. 增強安全性:提高程式碼安全,防止 SQL注入。這一點sql語句也可以做到。

  5. 可擴充套件性:應用程式和資料庫操作分開,獨立進行,而不是相互在一起。方便以後的擴充套件和DBA維護優化。

一、儲存過程與自定義函式定義不同點

        相同點: 完成特定功能的程式

       不同點:是否用return語句返回值 

       1、儲存過程使用者在資料庫中完成特定操作或者任務(如插入,刪除等),函式用於返回特定的資料。

  2、儲存過程宣告用procedure,函式用function。

  3、儲存過程不需要返回型別,函式必須要返回型別。

  4、儲存過程可作為獨立的pl-sql執行,函式不能作為獨立的plsql執行,必須作為表示式的一部分。

  5、儲存過程只能通過out和in/out來返回值,函式除了可以使用out,in/out以外,還可以使用return返回值。

  6、sql語句(DML或SELECT)中不可用呼叫儲存過程,而函式可以。

二、儲存過程優點,【個人總結到的比較精簡】

      1.程式碼精簡一致,一個儲存過程可以用於應用程式程式碼的其他地方

      2.可維護性高,更新儲存過程只需要在資料庫中更改即可,無需更改程式碼的業務邏輯.

      3 .程式執行效率更高、安全性更好,建立之後 已經編譯並且儲存到資料庫,直接寫sql就需要先分析再執行因此過程效率更高,直接寫sql語句會帶來安全性問題.

三、Oracle儲存過程:

DELIMITER ;;   更換預設的結束符.
procedure :儲存過程  
儲存過程建立:
CREATE PROCEDURE test_proce()
BEGIN
INSERT INTO t_test(a) VALUES(RAND() * 100);
END//
索引呼叫:
	ORACLE :   CALL 儲存過程名稱.    exec  儲存過程.

oracle建立儲存過程,簡單例子

四、Java呼叫儲存過程範例

五、oracle定時器建立,開啟、關閉

-- 簡單例子
CREATE event IF NOT EXISTS eventJob 
ON SCHEDULE EVERY 2 SECOND 
ON COMPLETION PRESERVE
DO CALL SP_procedure('');
CALL 

ALTER EVENT eventJob ON  COMPLETION PRESERVE ENABLE;  -- 開啟事件
ALTER EVENT eventJob ON  COMPLETION PRESERVE DISABLE;  -- 關閉事件