orace 存储过程简介 小DEMO

刚开始学习Oracle的存储过程和触发器等,也看了一些博客论坛总结的知识点!

摘取了一些比较不错的文章片段,拿来以备之后学习和巩固!

    在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器。在数据库系统中无论是存储过程还是触发器,都是通过SQL语句和控制流程语句的集合来完成的。相对来说,数据库系统中的触发器也是一种存储过程。存储过程在数据库中运算时自动生成各种执行方式,因此,大大提高了对其运行时的执行速度。在大型数据库系统如OracleSQL Server中都不仅提供了用户自定义存储过程的功能,同时也提供了许多可作为工具进行调用的系统自带存储过程。

   所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。

基本用法:

1.基本结构
CREATE OR REPLACE PROCEDURE
存储过程名字
(
   
参数1 IN NUMBER,
   
参数2 IN NUMBER
) 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
      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单步调试

 

createorreplaceprocedure CountSum(Ver in  char)

as

cnt number;

 begin

   select count(*) into cnt  from T_BANKNOTE where version=Ver;

    DBMS_OUTPUT.PUT_LINE('版本为2的个数:'||cnt);

end CountSum;
 

你可能感兴趣的:(Oracle学习)