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 ;
/