使用场景:
提取或计算复杂的数据可以使用存储过程减少与数据库的网络通信,提高效率。
理论知识
存储过程可以理解为一系列SQL语句的集合,不区分大小写。
PLSQL可以分为三个部分:声明部分、可执行部分、异常处理部分。
DECLARE
--声明变量、游标
BEGIN
--可执行部分
DBMS-OUTPUT_LINE('hello_world');--打印
--异常处理部分
END;
变量
1.普通类型变量(char,varchar2,date,number,Boolean,long)
2.特殊类型变量(引用类型)
变量名称 类型 := 赋值
DECLARE
--声明变量、游标
V_NAME VARCHAER2(20) :='张三'; --声明变量并赋值
V_SEX 表名.字段名%TYPE:='男'; --用表中字段类型声明变量类型
V_ROW 表名%TYPE; --声明变量为表中的一行数据
V_ADDR VARCHAER2(200);
BEGIN
--可执行部分
--直接赋值
V_ADDR :='广州';
--SQL语句赋值
SELECT '北京奥运村' INTO V_ADDR FROM DUAL;
DBMS-OUTPUT_LINE('hello_world');--打印
--异常处理部分
END;
条件分支
BEGIN
IF 条件1 THEN 执行1
ELSIF 条件2 THEN 执行2
ELSE 执行3
END IF;
END;
LOOP循环
DECLARE
V_NUM NUMBER :=1;
BEGIN
LOOP
DBMS-OUTPUT_LINE('hello_world');--打印
V_NUM :=V_NUM +1;
EXIT WHEN V_NUM>10; --退出
END LOOP;
END;
游标
用于存储一个查询返回的多行数据,通过遍历可以逐行访问数据。
DECLARE
--声明游标
CURSOR c_emp IS SELECT NAME,SAL FROM EMP;
v_name VARCHAER2(20);
v_sal VARCHAER2(20);
BEGIN
--打开游标
OPEN c_emp;
--遍历游标
LOOP
--获取游标中的数据
FETCH c_emp INTO v_name,v_sal ;
--退出遍历的条件
EXIT WHEN c_emp%NOTFOUND
--结束遍历
END LOOP;
--关闭游标
CLOSE c_emp;
END;
存储过程
CREATE OR REPLACE PROCEDURE 存储过程名称(v_name1 IN varchar2(20),v_name2 OUT varchar2(20)) AS
--声明变量
BEGIN
END 存储过程名称