oracle預存程序的功能有:1、簡化複雜的操作,降低整體開發成本;2、增加資料獨立性;3、可有效降低錯誤出現的幾率,提高安全性;4、提高效能。
本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。
Oracle預存程序在實際資料庫開發過程當中會經常使用到,作為一個資料庫開發者必備的技能,它有著SQL語句不可取代的作用。所謂儲存過程,就是一段儲存在資料庫中執行某塊業務功能的程式模組。它是由一段或多段的PL/SQL程式碼區塊或SQL語句組成的一系列程式碼區塊。
預存程序的作用(優點):
#簡化複雜的操作,降低整體開發成本。
預存程序把實際執行的業務邏輯PL/SQL塊和多條SQL語句封裝到預存程序當中,其它開發者只需要呼叫寫好的過程,取得想要的結果,不需要重新理解業務。把業務抽取出來由專門的人來寫。
增加資料獨立性。
它的作用和視圖的作用類似,假如表的基礎資料發生變化,我們只需要修改過程當中的程式碼,而不需要修改呼叫程式。使得使用者程式不需要直接面對基礎資料進行編寫程式碼。使得程式碼內聚程度更高,耦合度更低。
提高安全性。
使用預存程序有效降低了錯誤出現的幾率。如果不使用預存程序要實現某項操作可能需要執行多個單獨的SQL語句,而過多的執行步驟很可能會造成更高的出現錯誤幾率。
提高效能。
實際開發過程中,一個業務模組功能的開發可能需要用到多個SQL語句,多個PL/SQL程式區塊才能解決問題。把它寫進過程,Oracle只需要一次編譯,以後隨時可以呼叫。如果不使用過程,直接把許多SQL語句寫進程式當中,需要多次編譯,而且需要多次連接資料庫,大大的降低了效能。
建立Oracle預存程序語法:
create [or replace] procedure 过程名 ( p1 in|out datatype, p2 in|out datatype, ... pn in|out datatype ) is ....--声明部分 begin ....--过程体 end;
語法解析:
1、procedure 關鍵字是建立預存程序的命令。
2、create [or replace] :如果預存程序已經存在則覆寫替代原有的程序。
3、in|out :預存程序有入參與出參兩種參數選擇,in表示的是入參,out表示的是出參,在使用過程的時候,入參必須得有對應的變數傳入,出參得有對應的變數接收。
4、datatype表示出入參變數對應的資料型態。
5、is後面跟著的是過程當中使用到的宣告變數。
6、begin...end 中間寫的就是預存程序的具體操作。
範例1、建立一個預存程序計算學生某一個課程中成績在班級中的排名,使用預存程序進行計算,傳回對應的排名,代碼如下:
create or replace procedure sp_score_pm( p_in_stuid in varchar2,--学号 p_in_courseid in varchar2, --课程ID p_out_pm out number--排名 ) is ls_score number:=0; ls_pm number:=0; begin --获取该学生的成绩 select t.score into ls_score from score t where t.stuid = p_in_stuid and t.courseid = p_in_courseid; --获取成绩比该学生高的人数 select count(1) into ls_pm from score t where t.courseid = p_in_courseid and t.score>ls_score; --得到该学生的成绩排名 p_out_pm:=ls_pm+1; exception when no_data_found then dbms_output.put_line('该学生的课程:'||p_in_courseid|| '的成绩在成绩表中找不到'); end;
透過上面的程式碼,我們可以直接在SQL視窗執行編譯,編譯成功後,我們就可以呼叫預存程序來取得學生對應的課程成績排名了,預存程序需要出入參賦值,因此我們可以透過PL/SQL語句塊進行測試,程式碼如下:
declare ls_pm number;--排名 begin --SC201801001 sp_score_pm('SC201801001','R20180101',ls_pm); dbms_output.put_line('学号:SC201801001,课程号:R20180101 的成绩排名是:'||ls_pm); sp_score_pm('SC201801001','R20180102',ls_pm); dbms_output.put_line('学号:SC201801001,课程号:R20180102 的成绩排名是:'||ls_pm); --SC201801002 sp_score_pm('SC201801002','R20180101',ls_pm); dbms_output.put_line('学号:SC201801002,课程号:R20180101 的成绩排名是:'||ls_pm); sp_score_pm('SC201801002','R20180102',ls_pm); dbms_output.put_line('学号:SC201801002,课程号:R20180102 的成绩排名是:'||ls_pm); end;
結果如下:
#推薦教學:《Oracle教學》
以上是oracle儲存過程的作用有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!