您的位置:首页 > 数据库 > Oracle

Oracle存储过程详解

2015-12-02 16:12 609 查看
1、基本结构
CREATE [
OR REPLACE ] PROCEDURE 存储过程名字 (
argument1 [ mode1 ] datatype1,
argument2 [ mode2 ] datatype2,
…
) IS
变量1 INTEGER := 0 ;
变量2 DATE ;
BEGIN
-- 存储过程操作执行体
END 存储过程名字

2、SELECT INTO STATEMENT

将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)

例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
--异常处理,在业务需要时可以<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px;">Rollback</span>;
END;
...
3、IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
IF 条件1 THEN
-- 表达式1
ELSIF 条件2 THEN
-- 表达式2
...
END IF;
4、while 循环
WHILE i < 10 LOOP
BEGIN
i := i + 1 ; -- 业务处理
END ;
END LOOP ;
5、变量赋值
V_TEST := 123;
6、用for in 使用游标cursor
...
IS
CURSOR cur IS SELECT * FROM 表名;
BEGIN
FOR cur_result IN cur LOOP
BEGIN
V_SUM := cur_result.列名1 + cur_result.列名2
END ;
END LOOP ;
END ;


7、带参数的cursor
CURSOR C_USER (条件1 NUMBER) IS SELECT * FROM 表名 WHERE 条件列1 = 条件1;

OPEN C_USER (变量值);

LOOP FETCH C_USER INTO V_NAME;

EXIT FETCH C_USER % NOTFOUND;

-- 处理逻辑
END LOOP;

CLOSE C_USER;
8、异常处理
...
BEGIN
...
EXCEPTION -- 下面所有处理都为可选
WHEN NO_DATA_FOUND THEN
处理1; -- 未查找到数据异常处理
WHEN ACCESS_INTO_NULL THEN
处理2; -- 为定义对象
...
WHEN OTHERS THEN
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px;">Rollback; -- </span>其他异常处理,此处为事例
END ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 存储过程