Oracle存储过程实例

存储过程(Stored Procedure)是一组用于完成特定数据库功能的SQL语句集,SQL集包含了所要进行的各种处理,经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,得到想要的结果。
使用工具:plsql、Oracle

Oracle存储过程保存在数据库procedures下,基本写法如下:

  1. 基本结构
CREATE OR REPLACE PROCEDURE 存储过程名称  
 IS  //声明  
 ;  
 BEGIN 	// 执行  
		//要实现的逻辑功能
 ;  
 EXCEPTION//存储过程异常操作  
 ;  
 END 存储过程名称;  

在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别;
在视图(VIEW)中只能用AS不能用IS;
在游标(CURSOR)中只能用IS不能用AS
2. 无参的存储过程

//新建了一个无参的存储过程,输出procedure testeeee11
CREATE OR REPLACE PROCEDURE TEST1 IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('procedure testeeee11');
END TEST1;

//调用你的存储过程
DECLARE
BEGIN
  TEST1;
END;

按F8执行编译后,存储过程不能直接执行,新建一个测试窗口,调用存储过程,按F8执行即可在输出中看到结果。
3. 有参的存储过程

//模糊查询到结果的数量
CREATE OR REPLACE PROCEDURE TEST4(TSKNAME IN NVARCHAR2, COUNTS OUT NUMBER) IS
BEGIN
  SELECT COUNT(*) INTO COUNTS FROM TASK_INFO WHERE TASKNAME LIKE '%'||TSKNAME||'%';
END TEST4;

//调用存储过程,传入对应的参数
DECLARE 
  COUNTS NUMBER;
BEGIN
  TEST4('假',COUNTS);
  DBMS_OUTPUT.PUT_LINE('符合条件的数量为:'||COUNTS);
END;

其中存储过程的参数分为in、out和in out三种模式
in:用于接收参数,在子程序内部,不能进行修改
out:表示返回值参数
int out:表示该参数可以向该过程中传递值,也可以将某个值输出

  1. if判断:
//添加if判断
CREATE OR REPLACE PROCEDURE TEST5(TSKNAME IN NVARCHAR2,COUNTS OUT NUMBER,MESSAGE OUT NVARCHAR2) AS
BEGIN
  SELECT COUNT(*) INTO COUNTS FROM TASK_INFO WHERE TASKNAME LIKE '%'||TSKNAME||'%';
  IF COUNTS >5 THEN
    BEGIN 
       MESSAGE:= '相似数据过多';
    END;
  END IF;
  IF COUNTS <2 THEN
    BEGIN
      MESSAGE:='数据量不足';
    END;
  END IF;
END TEST5;
//调用
DECLARE 
  COUNTS INT:=0;
  MESSAGE NVARCHAR2(20);
BEGIN
  TEST5('假数据1',COUNTS,MESSAGE);
  DBMS_OUTPUT.PUT_LINE('查询到的数量为:'||COUNTS);
  DBMS_OUTPUT.PUT_LINE('输出的信息为:'||MESSAGE);
END;
  1. loop循环:
//使用循环
CREATE OR REPLACE PROCEDURE TEST5(COUNTS OUT NUMBER) AS
NUM INT;
BEGIN
  NUM:=0;
  SELECT COUNT(*) INTO COUNTS FROM TASK_INFO WHERE ID = NUM;
  WHILE NUM < 10 LOOP
    BEGIN
      SELECT COUNT(*) INTO COUNTS FROM TASK_INFO WHERE ID = NUM;
      DBMS_OUTPUT.PUT_LINE('我已经执行了一次:'||NUM);
      NUM:= NUM+1;
      COUNTS:= NUM;
  END;
  END LOOP;
END TEST5;

//调用
DECLARE 
  COUNTS INT:=0;
BEGIN
  TEST5(COUNTS);
  DBMS_OUTPUT.PUT_LINE('最终的数量为:'||COUNTS);
END;
  1. 对数据库的添加
CREATE OR REPLACE PROCEDURE TEST_ADD
(ID NUMBER,CREATETIME DATE,TASKNAME VARCHAR,
CONTENT VARCHAR,REMARK VARCHAR)
IS
BEGIN
  INSERT INTO TASK_INFO VALUES(ID,TASKNAME,CONTENT,REMARK,CREATETIME);
COMMIT;//提交事务
END TEST_ADD;
  1. 异常处理:
EXCEPTION
WHEN 异常类型 THEN 
RAISE_APPLICATION_ERROR(-20010, '提示信息');
WHEN 异常类型 THEN 
RAISE_APPLICATION_ERROR(-20011, '提示信息');

更多关于异常处理:Oracle存储过程的异常处理

你可能感兴趣的:(Oracle)