天猫的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
飞行鱼
阅读(220)
评论(0)
编辑
收藏
所属分类:
Oracle
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
四大主流数据库比较
oracle分区表总结(转)
【转】oracle 9i存储过程详解
<
2025年3月
>
日
一
二
三
四
五
六
23
24
25
26
27
28
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
留言簿
给我留言
查看公开留言
查看私人留言
文章分类
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 字符或字符串大小写转换
很好
--保密