oracle procedure存储过程

1、基本结构

CREATE OR REPLACE PROCEDURE 存储过程名字
(
    参数1    IN NUMBER,
    参数2    IN NUMBER       
) IS/AS

变量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 
     ROLLBACK;
     RAISE; 
END; 

3、IF判断

IF    条件1    THEN 
    Do Someting
    ELSIF    条件2    THEN
        Do Someting
    ELSIF    条件3    THEN
        Do Someting
    ELSE
        Do Someting

END IF; 

4、while循环

WHILE V_TEST=1 LOOP 
    BEGIN 
        XXXX 
    END; 
END LOOP; 

5、变量赋值

V_TEST := 123; 

6、用for    in使用cursor(游标)

... 
    IS 
        CURSOR cur IS SELECT * FROM xxx; 
    BEGIN 
        FOR cur_result in cur LOOP 
            BEGIN 
            V_SUM :=cur_result.列名1+cur_result.列名2 
            END; 
        END LOOP; 
    END; 

7、用pl/sql developer debug

  连接数据库后建立一个Test Window

  在窗口输入调用SP的代码,F9开始Debug,CTRL+N单步调试

注意事项:

1)存储过程参数不带取值范围,in表示传入,out表示输出;

2)变量可带取值范围,后面接分号;

3)在判断语句前最好先用count(*)函数判断是否存在该条操作记录

4)用select...into...给变量赋值

5)在代码中抛出异常用RAISE;通常的用法:

EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        RAISE;
/*
异常分很多类,如NO_DATA_FOUND。OTHERS处本应该写异常名称,如果不想把异常分得那么细,可以笼统一点用OTHERS来捕获,即所有异常均用OTHERS来捕获。
WHEN OTHERS THEN 表示是其它异常。
RAISE表示抛出异常,让User可以看到。
*/

6)AS/IS的区别

  在试图(VIEW)中只能用AS不能用IS

  在游标(CURSOR)中只能用IS不能用AS

7)输出变量赋值有两种,一种是直接:=,还有一种就是SELECT INTO

8)显示调试信息

  a.存储过程中在必要的位置添加

DBMS_OUTPUT.put_line('HI');

  b.打开DBMS_OUTPUT

show serveroutput;
set serveroutput on;

9)删除PROCEDURE

DROP PROCEDURE procedure_name;
原文地址:https://www.cnblogs.com/codingmengmeng/p/7392379.html