oracle 9i存儲過程詳解

1.塊結構:
PL/SQL程序被分割爲稱爲塊(block)的結構,塊中包含PL/SQL程序語句。典型的PL/SQL塊具有
以下的結構:
[DECLARE
    declaration_statements
]
BEGIN
    executable_statements
[EXCEPTION
    exception_handling_statements
]
END;
語法元素:
declaration_statement :
  聲明瞭在塊的其餘部分中使用的變量。這些變量是塊的局部變量。
executable_statment:
  塊的實際可執行語句。
exeception_handling_statement:
  處理可執行語句可能發生的錯誤。

注意:每條語句都要有(;)分號結尾,塊使用END關鍵字結尾。

例程:
DECLARE
    width INTEGER :=2;
    height INTEGER ;
    area INTEGER ;
BEGIN
    height :=3 ;
    area :=width*height ;
    DBMS_OUTPUT.PUT_LINE('Area='||area); //表示在屏幕上顯示;
END;
/   //表示執行這個PL/SQL塊;

注意:必須在SQL*PLUS中提前輸入:SET SERVEROUTPUT ON 才能顯示的輸出。

2.變量類型:
變量名   變量類型 ;/ : = [初始數值] ;
  id   INTEGER ;
name   VARCHAR2(20) :='BinMing';

  * proname product.price%TYPE ; // (%TYPE) 表示proname 的類型要和product表中的price的類型一致。

3.條件邏輯:
1.IF [條件1] THEN
    [語句段];
  ELSEIF [條件2] THEN
      .
.
.
  END IF ;


2.循環(簡單循環/WHILE/FOR)
  單循環:
LOOP
  statements
END LOOP;
//一直循環語句段,除非顯示的輸入EXIT / EXIT WHEN 語句結束循環
     
  WHILE循環:
WHILE condition LOOP
    statements
END LOOP;

example:
  count:=0;
  WHILE counter<6 LOOP
    count :=count + 1 ;
  END LOOP ;

3.FOR循環:
FOR loop_variable IN [REVERSE] lower_bound..upper_bound LOOP
  statements;
END LOOP;

example:
  FOR id IN 3..6 LOOP
  DBMS_OUTPUT.PUT_LINE(id);
  END LOOP;


4.遊標的使用:

步驟一: 聲明變量來存儲例值 :

DECLARE
  id products.id%TYPE;
 
 

步驟二: 聲明遊標 :

遊標要放在聲明部分中。

CURSOR product_cursor IS  
  Select
  id,name,price
  FROM
  products
  ORDER BY
  id;

        //聲明瞭遊標的類型或着說方法

步驟三:打開遊標 :
使用OPEN語句打開遊標,必須放在塊的可執行部分中。

  OPEN product_cursor ;

步驟四: 從遊標中獲取行:
使用 FETCH 語句讀取遊標中的行:
  FETCH:
  product_cursor;
  INTO
  id,name,price;   //把值存儲到上面聲明的三個變量中.
// 如果遊標返回可能包含很多行的話,就要循環取出每一行數據,
  可以使用product_cursor%NOTFOUND決定虛幻何時結束。

步驟五: 關閉遊標:
CLOSE product_cursor;

5.過程:
    使用PL/SQL創建包含一組SQL語句和PL/SQL語句的過程。
    可以使用這些過程將業務邏輯集中在數據庫中,訪問數據
    庫的任何程序都可以使用這些過程。

    使用Create PROCEDURE 語句創建PL/SQL過程:
Create[OR REPLACE] PROCEDURE procedure_name     //過程名字
[(parameter_name)[IN|OUT|IN OUT] type[, ])] //過程使用的參數
{IS|AS}
{
  body
};

.IN 參數的默認模式。如果在過程運行時參數以有一個值,而且這個值在過程體中不能修改,
  那麼就應該指定這種模式。
.OUT 如果參數的值只在過程體中設置,那麼就應該指定這種模式。
.IN OUT 如果在過程被調用時參數可能已經有一個值,但是這個值可以在過程體中修改,那
麼就應該指定這種模式。


例子程序:
Create PROCEDURE update_product_price(

  p_product_id IN products.id%TYPE ;
  p_factor   IN NUMBER ;
 
  ) AS

  product_count INTEGER ;

  BEGIN
  Select
  COUNT(*)
  INTO
  product_count
  FROM
  products
  Where
  id = p_product_id;

  IF product_count = 1 THEN
  Update
      products
  SET
      price = price * p_factor ;
  COMMIT ;
  END IF ;

  END update_product_price ;
  /

發佈了50 篇原創文章 · 獲贊 6 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章