存储过程
是一组为完成特点功能的SQL语句集,经编译后存储在数据库中。
- ### 特点:
1. 创建时编译,在执行的时候不再进行编译;一般SQL语句是每执行一次编译一次。因此存储过程可提高数据库的执行速度。
2. 当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来。
3. 简化一系列复杂语句,可以调用另一个存储过程或者函数。
4. 安全性能高,可以设定权限。
5. 参数有三种(IN、OUT、IN OUT),可返回多个参数值。
6. 在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。
- ### 语法:
create procedure <过程名>(<参数列表,无参时忽略>)
as|is
变量声明、初始化
begin
业务处理、逻辑代码
exception
异常捕获、容错处理
end <过程名>;
参数:<参数名> in|out|in out <参数类型,无长度说明> ,如:v_name varchar2
in:入参
out:出参
in out:出入参
注:as|is表示as或is
- ### 调用:
1.exec <过程名>;
2.execute <过程名>;
3.对于Oracle数据库,可在PL/SQL语句块中直接调用。(Oracle)
函数
数据库中的函数包括内置函数和自定义函数,内置函数是诸如SUM(),COUNT(),AVG()等数据库内置的函数。一般我们编写的函数都属于自定义函数。
- ### 特点:
1. 函数只有一种参数(IN),只有一条RETURN语句,只能返回单一的值。
2. 可在SQL语句(DML或SELECT)中调用函数。由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
- ### 语法:
create function <函数名>(<参数列表,无参时忽略>)
return <返回值类型,无长度说明>
as|is
变量声明、初始化
begin
业务处理、逻辑代码
return <返回的值>;
exception
异常捕获、容错处理
end <函数名>;
参数:in 入参
注:只有入参的类型。
- ### 调用:
1. 在SQL语句(DML或SELECT)中调用函数
2. 对于Oracle数据库,可在PL/SQL语句块中直接调用。(Oracle)
触发器
其实是一种特殊的存储过程。一般的存储过程是通过存储名调用,而触发器主要是通过事件(增删改)来触发执行的。
特点
1. 不接收参数
2. 一个表最多可以有12个触发器。但是同一时间,同一事件,同一类型的触发器只能有一个。并且各个触发器不能有矛盾。
3. 在一个表上的触发器越多,DML操作性能影响越大。
4. 触发器最大的容量为32k
5. 触发器不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)
6. for each row 行触发器
7. :NOW 修饰符访问操作完成后的值。
8. :OLD 修饰符访问操作完成前的值。
语法:
create or replace trigger <触发器名>
after|before insert|update|delate on 某表(触发事件表)
for each row(语句触发器 无此句)
declare
声明变量
begin
业务,逻辑代码
exception
捕获异常,容错处理
end <触发器名>