存储过程(Stored Procedure)是一组用于完成特定数据库功能的SQL语句集,SQL集包含了所要进行的各种处理,经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,得到想要的结果。
使用工具:plsql、Oracle
Oracle存储过程保存在数据库procedures下,基本写法如下:
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:表示该参数可以向该过程中传递值,也可以将某个值输出
//添加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;
//使用循环
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;
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;
EXCEPTION
WHEN 异常类型 THEN
RAISE_APPLICATION_ERROR(-20010, '提示信息');
WHEN 异常类型 THEN
RAISE_APPLICATION_ERROR(-20011, '提示信息');
更多关于异常处理:Oracle存储过程的异常处理