oracle函數或者叫存儲過程,在實際的開發過程中對於復雜的業務需求是非常有用的,非常有效率的也是非常好玩兒的一個技術點。
平常在開發過程中對於CRUD功能較多。一般SQL即可應付,大不了就是長一點而已。但是遇到復雜業務需求,在Java代碼中開發略顯混亂時,函數將可以作為一個非常優秀的實現方式,在數據庫中對業務進行處理。
下面介紹一下oracle函數的集中語法,小弟學藝不精,如有遺漏,請不吝指正:
oracle語法在編寫過程中其實比較簡單,首先它是一個腳本語言,也叫作解釋性語言,腳本語言如python,js等的共有特點就是從上到下一行一行的執行。也就是說我們只要符合函數的語法,我們可以隨意在函數里面寫DML語句(CRUD)、DCL(GRANT)、DDL語句等,所有初次編寫函數的時候可能無從下手,但其實語法非常隨意。
1、那其實,首先我們需使用create or replace語句來創造函數,為什么要加一個replace(替代)單詞,其實意思就是,由函數重名的情況就替換掉,這是因為在函數發包的時候可能要替換掉原來的函數。例子:
create or replace fn_xxx_aaa(arg1.arg2....)
end fn_xxx_aaa;
2、變量的定義
所謂函數,肯定要有參數,有返回值。但是oracle函數多了一個叫做輸出值,也是程序調用之后可以接受到的一些查詢結果或是游標。輸入輸出值定義在括號內。
3、游標及循環
其實游標就是一個緩存,例如,我們在函數里面進行判定的時候,我們可能需要遍歷一個表的數據,那我們不能去把表里面的數據都查一遍,這樣太浪費資源了,而且數據庫是一種非常稀有的資源,所以我們就要把所有的數據都查出來,存在游標里面,去循環它,這樣也可以得到游標里面的所有數據。
declare cursor XX_XX_XX is
select * from aaa;
begin
open cursor;
loop
fetch XX_XX_XX into xx x xx xx x;
exit when XX_XX_XX%NOTFOUND;
begin
xxxxxxxxxxxxxxxxxxx
end;
end loop;
end;
上面的就是最簡單的游標配合循環做業務的一些處理。先將游標數據抓取賦值給定義的某種變量,然后拿着變量一點一點做循環判斷,對數據進行處理。
4、除了游標之外呢,還有一種東西也是常用到的一種東西,視圖。
視圖其實什么也不是,為什么說他什么也不是呢,因為視圖就根本不存在,我們定義完了視圖之后呢,其實就是在你的 sql之后添加了一些sql,比如說我們create了一個視圖,其實還是將兩個或者多個集合的數據搞到一個集合里面了,也就是你這個sql后面有添加了一段sql。
5、還有一個東西,表分區。
雖然做完之后效果不明顯吧,但是畢竟對Linuxoracle服務器熟悉了,數據泵文件導入導出也很熟悉了。好吧,下一篇文章寫數據泵文件的導入導出以及表分區。
第一次寫這么長的博客,小弟年齡肯定比各位看官想的小得多,所以請隨意指教,謝謝各位看官,希望對您對我都有所幫助。