oracle 9i儲存過程詳解

2021-04-19 18:16:26 字數 3169 閱讀 9607

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[, ])] //過程使用的引數

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

setprice = price * p_factor ;

commit ;

end if ;

end update_product_price ;

/

解除安裝Oracle 9i

1 停止所有oracle服務 2 刪除登錄檔中的所有關於oracle項 1 在hkey local machine software下,刪除oracle目錄 2 在hkey local machine system controlset001 services下,刪除所有oracle項 3 在hke...

oracle9i解除安裝

今天裝了oracle 9i,後來重灌遇到問題因為解除安裝未乾淨。幾經周折終於成功,現將解除安裝步驟供以後參考 1 停止服務 開啟 服務 然後停止所有oracle服務 2 刪除程式 3 刪除登錄檔中的所有關於oracle項 1 在hkey local machine software下,刪除oracl...

oracle9i解除安裝

今天裝了oracle 9i,後來重灌遇到問題因為解除安裝未乾淨。幾經周折終於成功,現將解除安裝步驟供以後參考 1 停止服務 開啟 服務 然後停止所有oracle服務 2 刪除程式 3 刪除登錄檔中的所有關於oracle項 1 在hkey local machine software下,刪除oracl...