首頁 >資料庫 >Oracle >oracle儲存過程的作用有哪些

oracle儲存過程的作用有哪些

青灯夜游
青灯夜游原創
2022-02-24 17:58:414530瀏覽

oracle預存程​​序的功能有:1、簡化複雜的操作,降低整體開發成本;2、增加資料獨立性;3、可有效降低錯誤出現的幾率,提高安全性;4、提高效能。

oracle儲存過程的作用有哪些

本教學操作環境: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教學

以上是oracle儲存過程的作用有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn