1. 程式人生 > >DB2資料庫使用儲存過程詳解

DB2資料庫使用儲存過程詳解

       儲存過程Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。

      主要特點:

類語言主要提供以下功能,讓使用者可以設計出符合引用需求的程式:

1)變數說明

2)ANSI(美國國家標準化組織)相容的SQL命令(Select,Update….)

3)、一般流程控制命令(if…else…while….)

4)、內部函式

       儲存過程的優點:

(1) .儲存過程的能力大大增強了SQL語言的功能和靈活性。儲存過程可以用流控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的

運算。

(2) .可保證資料的安全性和完整性。

(3) .通過儲存過程可以使沒有許可權的使用者在控制之下間接地存取資料庫,從而保證資料的安全。

(4) .通過儲存過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。

(5) .在執行儲存過程前,資料庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的效能。由於執行SQL語句的大部分工作已經完成,所以儲存過程能以極快的速度執行。

(6) .可以降低網路的通訊量。

(7) .使體現企業規則的運算程式放入中,以便:

(8) .集中控制。

(9) .當企業規則發生變化時在伺服器中改變儲存過程即可,無須修改任何

應用程式。企業規則的特點是要經常變化,如果把體現企業規則的運算程式放入應用程式中,則當企業規則發生變化時,就需要修改應用程式工作量非常之大(修改、發行和安裝應用程式)。如果把體現企業規則的運算放入儲存過程中,則當企業規則發生變化時,只要修改儲存過程就可以了,應用程式無須任何變化。

簡單講:

1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量

4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權

有一點需要注意的是,一些網上盛傳的所謂的儲存過程要比sql語句執行更快的說法,實際上是個誤解,並沒有根據,包括微軟內部的人也不認可這一點,所以不能作為正式的優點,希望大家能夠認識到這一點。

使用者建立的儲存過程是由使用者建立並完成某一特定功能的儲存過程,事實上一般所說的儲存過程就是指本地儲存過程。

臨時儲存過程

分為兩種儲存過程:

一是本地臨時儲存過程,以井字號(#)作為其名稱的第一個字元,則該儲存過程將成為一個存放在tempdb資料庫中的本地臨時儲存過程,且只有建立它的使用者才能執行它;

二是全域性臨時儲存過程,以兩個井字號(##)號開始,則該儲存過程將成為一個儲存在tempdb資料庫中的全域性臨時儲存過程,全域性臨時儲存過程一旦建立,以後連線到伺服器的任意使用者都可以執行它,而且不需要特定的許可權。

遠端儲存過程

SQLServer2005中,遠端儲存過程(RemoteStored Procedures)是位於遠端伺服器上的儲存過程,通常可以使用分散式查詢和EXECUTE命令執行一個遠端儲存過程。

擴充套件儲存過程

擴充套件儲存過程(ExtendedStored Procedures)是使用者可以使用外部程式語言編寫的儲存過程,而且擴充套件儲存過程的名稱通常以xp_開頭。

.建立儲存過程

createprocedure sp_name

@[引數名] [型別],@[引數名] [型別]

as

begin

.........

end

以上格式還可以簡寫成:

createproc sp_name

@[引數名] [型別],@[引數名] [型別]

as

begin

.........

end

/*注:“sp_name”為需要建立的儲存過程的名字,該名字不可以以阿拉伯數字開頭*/

.呼叫儲存過程

1.基本語法:execsp_name [引數名]

.刪除儲存過程

1.基本語法:

dropprocedure sp_name

2.注意事項

(1)不能在一個儲存過程中刪除另一個儲存過程,只能呼叫另一個儲存過程

.其他常用命令

1.showprocedure status

顯示資料庫中所有儲存的儲存過程基本資訊,包括所屬資料庫,儲存過程名稱,建立時間等

2.showcreate procedure sp_name

顯示某一個mysql儲存過程的詳細資訊

3execsp_helptext sp_name

顯示你這個sp_name這個物件建立文字

DB2儲存過程例項:

        客戶在進行簡訊服務這個業務申請時,需要填寫一些基本資訊,然後根據這些資訊判斷這個使用者是否已經存在於業務系統中。因為網上服務和業務系統兩個專案物理隔離,而且網上資料庫儲存的客戶資訊不全,所以判斷需要把資料交換到業務系統,在業務系統中判斷。

解決方式是通過儲存過程:

       功能說明:

       呼叫儲存過程時會傳入一些值(IN輸入引數),然後根據傳入的值查詢資料庫(select語句),根據查詢結果執行操作(新增、刪除、更新)有兩種方式執行寫好的儲存過程:

DROP PROCEDURE "PLName"
@
CREATE PROCEDURE "PLName"(--儲存過程名字
IN IN_ID BIGINT ,                    --以下全是輸入引數
IN IN_ENTNAME VARCHAR(200) ,
IN IN_REGNO VARCHAR(50),
IN IN_PASSWORD VARCHAR(20),
IN IN_LEREP VARCHAR(300),
IN IN_CERTYPE CHARACTER(1),
IN IN_CERNO VARCHAR(50),
IN IN_LINKMAN VARCHAR(50),
IN IN_SEX CHARACTER(1),
IN IN_MOBTEL VARCHAR(30),
IN IN_REQDATE TIMESTAMP,
IN IN_REMITEM VARCHAR(300),
IN IN_STATE CHARACTER(1),
IN IN_TIMESTAMP TIMESTAMP
)
BEGIN
    
   declare V_RESULT  BIGINT;     --宣告變數
   DELETE FROM  TableNameA WHERE ID = IN_ID;

   SET V_RESULT = NULL;          --為變數賦值
  --檢查使用者輸入的資訊是否合法

  select b.id INTO V_RESULT  from TableNameB b,TableNameC c where 正常的判斷條件  
  if(V_RESULT IS NOT NULL)  then ---如果合法,執行下面的insert語句
   INSERT INTO TableNameA(ID,ENTNAME,REGNO,PASSWORD,LEREP,CERTYPE,CERNO,LINKMAN,SEX,MOBTEL,REQDATE,REMITEM,STATE,TIMESTAMP)
   VALUES(IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP);
  end if;
    commit;
END
@

   1.拷貝到DB2客戶端工具中直接執行

  特別注意:執行時將改成@,之前很多錯誤都和它有關,比如:“該命令被當作 SQL語句來處理,因為它不是有效的命令列處理器命令”.

   2.將上面的語句儲存為test.db2檔案放到任意目錄下(比如D盤根目錄),然後在cmd輸入db2cmd 然後輸入db2 [email protected] -vf D:\test.db2即可執行後就可以測試儲存過程寫的是否正確.

       直接寫sql:

    call PLName(儲存過程名字) (IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP對應的值)

相關推薦

資料庫儲存過程

儲存過程的優缺點   ◆優點:   執行速度更快。儲存過程只在創造時進行編譯,而一般SQL語句每執行一次就編譯一次,所以使用儲存過程執行速度更快。   儲存過程用於處理複雜的操作時,程式的可讀性更強、網路的負擔更小。   使用儲存過程封裝事務效能更佳。   能有效的放注入

MySQL資料庫-儲存過程

儲存過程簡單來說,就是為以後的使用而儲存的一條或多條MySQL語句的集合。可將其視為批件,雖然它們的作用不僅限於批處理。在我看來, 儲存過程就是有業務邏輯和流程的集合, 可以在儲存過程中建立表,更新資料, 刪除等等。 MySQL基礎教程之儲存過程 儲存過程簡單來說,就

DB2資料庫使用儲存過程

       儲存過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。       主要特點: 類語言主要提供以下功能,讓使用者可

資料庫儲存過程 儲存過程

轉自張龍豪原文儲存過程詳解 儲存過程(Procedure)可以說是一個記錄集吧,它是由一些T-SQL語句組成的程式碼塊,這些T-SQL語句程式碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個程式碼塊取一個名字,在用到這個功能的時候呼叫他就行了。 儲存過程的好處:1.由於資料庫執行動作時

db2 儲存過程

學習 DB2 9.5 SQL Procedural Language,包括變數、條件、處理程式宣告、控制流和迭代語句以及錯誤處理機制。 您將: 學習 SQL PL 的基本要素。理解如何宣告變數、條件和處理程式。學習控制流語句。學習遊標處理和如何返回結果集。理解錯誤處理

MySQL檢視和儲存過程

一 mysql檢視 1 檢視的目的: 讓同一個資料庫被訪問時,對於不同的登入帳號,顯示不同的資料資訊 2 檢視的優點: 1)資料獨立: 一旦檢視結構確定,可以遮蔽表結構對使用者的影響 2)安全: 使用者只能看到檢視中的資料 3)簡單: 使用者不需要關心檢視中的資料如何查詢獲得,檢視中的資

mongo 儲存過程

儲存過程 關係型資料庫的儲存過程描述為: 一組為了完成特定功能的SQL 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它 。 MongoDB 為很多問題提供了一系列的解決方案,針對於其它資料庫的特性,它仍然毫不示 弱,表現的非比尋常。MongoDB

Java呼叫SQL Server的儲存過程

                本文較長,包含了如下幾部分                    1使用不帶引數的儲存過程     使用 JDBC 驅動程式呼叫不帶引數的儲存過程時,必須使用 call SQL 轉義序列。不帶引數的 call 轉義序列的語法如下所示: {call procedure-name}

撩課-Mysql第19部分儲存過程

學習地址: 撩課-JavaWeb系列1之基礎語法-前端基礎 撩課-JavaWeb系列2之XML 撩課-JavaWeb系列3之MySQL 撩課-JavaWeb系列4之JDBC 撩課-JavaWeb系列5之web伺服器-idea 什麼是儲存過程 一組可程式設計的函式, 是為了完成特

MSSQL儲存過程

用TSQL語句編寫儲存過程一、變數和引數           DECLARE 語句通過以下操作初始化 Transact-SQL 變數:           指定名稱。名稱的第一個字元必須為一個 @。           指定系統提供的或使用者定義的資料型別和長度。對於數值變數還指定精度和小數位數。對於 XML

Oracle儲存過程(一)

儲存過程建立語法: create [or replace] procedure 儲存過程名(param1 in type,param2 out type) as 變數1 型別(值範圍); 變數2 型別(值範圍); Begin Select

儲存過程

public partial class ProcedureTest : System.Web.UI.Page { public static string conn = ConfigurationManager.ConnectionStrings["StuRelationDBC

oracle中儲存過程

oracle中儲存過程的使用過程是指用於執行特定操作的PL/SQL塊。如果客戶應用經常需要執行特定操作,那麼可以考慮基於這些操作建立過程。通過使用過程,不僅可以簡化客戶應用的開發和維護,而且可以提高應用程式的執行機能。一、 使用過程引數當建立過程時,既可以指定過程引數,也可以

【PL/SQL】儲存過程

什麼是儲存過程 儲存過程是一種命名的PL/SQL程式塊,既可以沒有引數也可以有若干個輸入,輸出引數,但是它通常沒有返回值。儲存過程被儲存在資料庫中,可以被SQL語句直接呼叫,只能通過EXECUT命令或者在PL/SQL程式塊內部被呼叫。由於儲存過程是已經編譯好的程式碼,因此被呼叫或者引用時,執行效

Oracle/PLSQL儲存過程

一.在plsql中建立一個儲存過程開啟plsql,右鍵procedures,新建。如果新建毫無反應直接檔案-新建-程式視窗-空白,新建一個程式視窗: 儲存過程建立語法: create [or replace] procedure 儲存過程名(param1 in type

Oracle儲存過程(二)

無參儲存過程: create or replace procedure sayhello as --說明部分 begin dbms_output.put_line('hello world'); end; 命令視窗的兩種呼叫方法 1.

SQL Server 儲存過程

一. 什麼是儲存過程 系統儲存過程是系統建立的儲存過程,目的在於能夠方便的從系統表中查詢資訊或完成與更新資料庫表相關的管理任務或其他的系統管理任務。系統儲存過程主要儲存在master資料庫中,以“sp”下劃線開頭的儲存過程。儘管這些系統儲存過程在maste

.NET 呼叫儲存過程

SqlConnection conn = new SqlConnection(ConStr); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "Categoriestest6"; cmd.Command

Mysql觸發器、檢視、儲存過程(例項)

/*觸發器trigger*/觸發器的概念:監視某種情況並出發某種操作例如:一個電子商城商品表goods簡稱g:主鍵   商品名    庫存    1      電腦      282      手錶      120訂單表o:訂單主鍵    訂單外來鍵    購買數量1   

mysql儲存過程

mysql> CREATE PROCEDURE p1() SET @last_procedure='p1'; mysql> CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_proc); mysql&g