在我的上乙個銀行專案中,我接到編寫oracle儲存過程的任務,我是程式設計師,腦袋裡只有一些如何使用callable介面呼叫儲存過程的經驗,一時不知如何下手,我查閱了一些資料,通過實踐發現編寫oracle儲存過程是非常不容易的工作,即使上路以後,除錯和驗證非常麻煩。儲存過程(stored procedure)是一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫
sql儲存過程執行起來比sql命令文字快得多。當乙個sql語句包含在儲存過程中時,伺服器不必每次執行它時都要分析和編譯它。
呼叫儲存過程,可以認為是乙個三層結構。這使你的程式易於維護。如果程式需要做某些改動,你只要改動儲存過程即可
你可以在儲存過程中利用transact-sql的強大功能。乙個sql儲存過程可以包含多個sql語句。你可以使用變數和條件。這意味著你可以用儲存過程建立非常複雜的查詢,以非常複雜的方式更新資料庫。
最後,這也許是最重要的,在儲存過程中可以使用引數。你可以傳送和返回引數。你還可以得到乙個返回值(從sql return語句)。
優點: 1.利於實施,可以現場修改,2.減小網路負擔。
缺點: 1.移植性差,2.語言支援功能有限,3多層下,介面一變動,工作量比較大。
一. 概述
oracle儲存過程開發的要點是:
• 使用notepad文字編輯器,用oracle pl/sql程式語言寫乙個儲存過程;
• 在oracle資料庫中建立乙個儲存過程;
• 在oracle資料庫中使用sql*plus工具執行儲存過程;
• 在oracle資料庫中修改儲存過程;
• 通過編譯錯誤除錯儲存過程;
• 刪除儲存過程;
二.環境配置
包括以下內容:
• 乙個文字編輯器notepad;
• oracle sql*plus工具,提交oracle sql和pl/sql 語句到oracle database。
• oracle 10g express資料庫,它是免費使用的版本;
需要的技巧:
• sql基礎知識,包括插入、修改、刪除等
• 使用oracle's sql*plus工具的基本技巧;
• 使用oracle's pl/sql 程式語言的基本技巧;
三.寫乙個儲存過程
儲存過程使用oracle's pl/sql 程式語言編寫,讓我們寫乙個什麼工作都不做的儲存過程,我們可以編譯和執行它而不用擔心會對資料庫產生任何損害。
在notepad, 寫下:
create or replace procedure skeleton
isbegin
null;
end;
把檔案存為skeleton.sql.
讓我們一行行遍歷這個儲存過程:
1 create or replace procedure skeleton
2 is
3 begin
4 null;
5 end;
行1:create or replace procedure 是乙個sql語句通知oracle資料庫去建立乙個叫做skeleton儲存過程, 如果存在就覆蓋它;
行2:行3:
行4:null pl/sql語句表明什麼事都不做,這句不能刪去,因為pl/sql體中至少需要有一句;
行5:四.建立乙個儲存過程
sql語句create or replace procedure在oracle資料庫中建立、編譯和儲存乙個儲存過程。
從window開啟sql*plus並且從sql*plus登入到你的資料庫;開啟skeleton.sql檔案.
在sql>命令提示符下輸入以下命令:
sql>@skeleton (此處如果不在工作目錄,則需要寫出絕對路徑如@c:/skeleton)
sql>/
sql*plus裝載skeleton.sql檔案的內容到sql*plus緩衝區並且執行sql*plus語句;sql*plus 會通知你儲存過程已經被成功地建立。
現在你的儲存過程被建立,編譯和儲存在你的oracle資料庫,我們可以執行它。
五.執行乙個儲存過程
從sql*plus 命令列提示符執行你的儲存過程使用execute命令,如下:
sql> execute skeleton;
sql*plus 輸出一下資訊確信儲存過程成功執行: pl/sql procedure successfully completed.
你也可以在乙個無名pl/sql塊內執行你的儲存過程,在sql*plus命令提示符下,它看起來像:
sql> begin
2 skeleton;
3 end;
4 /現在我們已經執行了我們的儲存過程,我們如何修改它呢?
六.修改乙個儲存過程
讓我們寫乙個輸出字串「hello world!」的儲存過程,用notepad開啟你的skeleton.sql 檔案,. 用dbms_output.put_line 過程呼叫去替換null語句,如下所示:
create or replace procedure skeleton
isbegin
dbms_output.put_line('hello world!');
end;
儲存到檔案skeleton.sql.
從sql*plus命令列, 開啟檔案skeleton.sql .
sql> @skeleton
sql>
1 create or replace procedure skeleton
2 is
3 begin
4 dbms_output.put_line('hello world!');
5* end;
sql> /
sql*plus 通知你儲存過程成功建立並輸出提示資訊:procedure created.
sql>
用execute 命令執行你的儲存過程:
sql> execute skeleton;
sql*plus顯示儲存過程執行成功:pl/sql procedure successfully completed.
我們想要的輸出字串 "hello world!"沒有出來,在顯示乙個dbms_output.put_line 結果前需要執行乙個set命令,在sql*plus 命令列提示符,鍵入:
sql> set serveroutput on
再次執行你的儲存過程:
sql> execute skeleton;
現在結果輸出了:hello world!
pl/sql procedure successfully completed.
七.除錯乙個儲存過程
當除錯乙個儲存過程時,遵循一樣的步驟,修改sql檔案,建立儲存過程,執行儲存過程,根據編譯器反饋的出錯資訊進行修改,這一步是非常繁瑣的,需要依靠經驗。
在實際的商用儲存過程的開發除錯過程中,由於涉及很多表、型別、游標、迴圈、條件等複雜的邏輯,和pl/sql語句的靈活運用,編譯時會產生很多錯誤提示資訊,程式設計師在根據這些錯誤資訊定位,進行修正,再編譯最後得到正確的結構;
八.放棄乙個儲存過程
如果在資料庫中你不在需要乙個儲存過程你可以刪除它,sql語句 drop procedure 完成從資料庫中刪除乙個儲存過程,drop procedure 在sql中被歸類為資料定義語言(ddl) 類操作,其他的例子有create, alter, rename 和truncate。.
在sql*plus 命令提示符下,使用drop procedure sql 語句刪除你的叫做skeleton的儲存過程:
sql> drop procedure skeleton;
sql*plus assures us the procedure has been removed:
procedure dropped.
總結本文詳細討論了如何使用oracle工具開發oracle商用儲存過程的步驟。最後在儲存過程的使用中可能是程式直接呼叫,也可能被觸發器呼叫。
有時候檢視可能也可以實現儲存過程的一些功能,因為檢視也是sql語句,儲存過程實現的功能更多,更複雜,能接受引數
如何開發ORACLE儲存過程
在我的上乙個銀行專案中,我接到編寫oracle儲存過程的任務,我是程式設計師,腦袋裡只有一些如何使用callable介面呼叫儲存過程的經驗,一時不知如何下手,我查閱了一些資料,通過實踐發現編寫oracle儲存過程是非常不容易的工作,即使上路以後,除錯和驗證非常麻煩。簡單地講,oracle儲存過程就是...
如何開發ORACLE儲存過程
一.概述 oracle儲存過程開發的要點是 使用notepad文字編輯器,用oracle pl sql程式語言寫乙個儲存過程 在oracle資料庫中建立乙個儲存過程 在oracle資料庫中使用sql plus工具執行儲存過程 在oracle資料庫中修改儲存過程 通過編譯錯誤除錯儲存過程 刪除儲存過程...
如何開發Oracle儲存過程
第 1 頁 如何開發oracle儲存過程 一。概述 oracle儲存過程開發的要點是 1 使用notepad文字編輯器,用oraclepl sql程式語言寫乙個儲存過程 2 在oracle資料庫中建立乙個儲存過程 3 在oracle資料庫中使用sql plus工具執行儲存過程 4 在oracle資料...