天貓的Blog
...從明天起,做一個幸福的人。...喂馬,劈柴,周游世界。...從明天起,開始關心糧食和蔬菜。...我有一所房子,面朝大海春暖花開......
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-0 評論-1 文章-13 trackbacks-0
【轉】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 ;
/
posted on 2008-06-06 18:50
飛行魚
閱讀(230)
評論(0)
編輯
收藏
所屬分類:
Oracle
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
四大主流數據庫比較
oracle分區表總結(轉)
【轉】oracle 9i存儲過程詳解
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
留言簿
給我留言
查看公開留言
查看私人留言
文章分類
Eclipse(2)
JavaScript(2)
Java基礎(3)
JSP(1)
Oracle(3)
視頻下載地址(1)
面試題(1)
文章檔案
2008年9月 (3)
2008年7月 (1)
2008年6月 (9)
收藏夾
JavaEE
JavaScript
搜索
最新評論
1.?re: JavaScript 字符或字符串大小寫轉換
很好
--保密
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 飛行魚
主站蜘蛛池模板:
亚洲三区在线观看无套内射
|
国产成人涩涩涩视频在线观看免费
|
女人隐私秘视频黄www免费
|
成人免费视频88
|
国产亚洲精品AA片在线观看不加载
|
久久久久久亚洲精品
|
中文字幕不卡免费高清视频
|
中文字幕精品亚洲无线码一区
|
亚洲区精品久久一区二区三区
|
一级中文字幕免费乱码专区
|
免费大香伊蕉在人线国产
|
日本系列1页亚洲系列
|
天天操夜夜操免费视频
|
亚洲精品乱码久久久久66
|
美女网站在线观看视频免费的
|
深夜A级毛片视频免费
|
免费大片在线观看网站
|
一级做a爰片性色毛片免费网站
|
久久久久亚洲国产
|
日本免费观看网站
|
免费一级毛suv好看的国产网站
|
www视频在线观看免费
|
亚洲欧洲日本在线观看
|
国产又粗又猛又爽又黄的免费视频
|
亚洲国产精品成人精品小说
|
国产一二三四区乱码免费
|
亚洲AV第一页国产精品
|
很黄很色很刺激的视频免费
|
久久亚洲精品中文字幕
|
最近免费中文字幕大全
|
成年免费a级毛片
|
亚洲AV区无码字幕中文色
|
久久www免费人成精品香蕉
|
亚洲精品无码永久在线观看你懂的
|
四虎精品亚洲一区二区三区
|
日韩精品无码免费视频
|
日韩精品一区二区亚洲AV观看
|
两个人看www免费视频
|
亚洲精品无码AV中文字幕电影网站
|
亚洲日本va一区二区三区
|
久久亚洲国产成人精品无码区
|