Oracle存储过程详解

来源:互联网 发布:易幻网络待遇怎么样 编辑:程序博客网 时间:2024/06/06 12:54
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-- 表达式1ELSIF 条件2 THEN-- 表达式2...END IF;
4、while 循环
WHILE i < 10 LOOPBEGINi := i + 1 ; -- 业务处理END ;END LOOP ;
5、变量赋值
V_TEST := 123; 
6、用for in 使用游标cursor
... IS CURSOR cur IS SELECT * FROM 表名;BEGINFOR cur_result IN cur LOOPBEGINV_SUM := cur_result.列名1 + cur_result.列名2END ;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 ;

0 0