oracle 儲存過程

2021-05-26 10:00:56 字數 3645 閱讀 6924

【it168 技術文件】

在我的上乙個銀行專案中,我接到編寫oracle儲存過程的任務,我是程式設計師,腦袋裡只有一些如何使用callable介面呼叫儲存過程的經驗,一時不知如何下手,我查閱了一些資料,通過實踐發現編寫oracle儲存過程是非常不容易的工作,即使上路以後,除錯和驗證非常麻煩。簡單地講,oracle儲存過程就是儲存在oracle資料庫中的乙個程式。

一. 概述

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

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商用儲存過程的步驟。最後在儲存過程的使用中可能是程式直接呼叫,也可能被觸發器呼叫。

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...

ORACLE儲存過程

自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...

Oracle 儲存過程

create or replace procedure p 有就替換,沒有就建立 iscursor c is select from emp for update begin for v emp in c loop if v emp.deptno 10 then update emp2 set sa...