存储过程

1. 基本结构 

CREATE OR REPLACE PROCEDURE 存储过程名字

(

    参数 1 IN NUMBER,

    参数 2 IN NUMBER

) 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

      xxxx;

  END;

  …

3.IF 判断

  IF V_TEST=1 THEN

    BEGIN 

       do something

    END;

  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. 带参数的 cursor

  CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;

  OPEN C_USER(变量值);

  LOOP

 FETCH C_USER INTO V_NAME;

 EXIT FETCH C_USER%NOTFOUND;

    do something

  END LOOP;

  CLOSE C_USER;

8. 用 pl/sql developer debug

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

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

 

简单实例,通过 DBMS_OUTPUT 来看结果

CREATE OR REPLACE PROCEDURE bb (lic_para IN VARCHAR2,out_para OUT VARCHAR2)

AS

   temp   VARCHAR2 (100);

BEGIN

   SELECT lic_no

     INTO temp

     FROM t_vehicle_info

    WHERE lic_no = lic_para;

    out_para:=temp;

    DBMS_OUTPUT.put_line (out_para);

END bb;

下面是调用:

begin

  – Call the procedure

  bb(lic_para => :lic_para,

     out_para => :out_para);

end;

    可以在命令行里敲 sqlplus “yonghuming/mima@dbname”接着调试存储过程。但是最好用的是在 pl/sql Developer 工具里面用点存储过程里的 TEST 来调用, 它能自动生成调用的语句并有栏目让你输入参数值,包括输入参数和输出参数,并把结果返回到输出参数里面,在结果栏可见,这点 pl/sql Developer 比 TOAD 要强,TOAD 在存储过程上右键后点击 EXECUTE Procedure 也可以执行,在 pl/sql Developer 按 F9 可以调试,ctrl+N 可以单步跟踪。