Oracle数据库,PL/SQL编程笔录
PL/SQL:
是Oracle对SQL语言过程的程序化拓展
基本语法结构:
[declare ...声明变量] begin ...程序块 [Exception ...异常处理] end;
=====================
--异常部分
exception
when 异常类型 then
异常处理逻辑:一般把异常信息写入log表中
变量的语法
变量名 类型(长度)【类型可以直接写成表名.列名%type 或者记录型表名%rowtype】;
赋值: 变量名 := 变量值 (快速冲数据中提取数据 可以使用select 列名 into 变量名 from 表名 where 条件)
条件判断
if 条件1 then ...业务逻辑1 elsif 条件2 then ...业务逻辑2 else ...业务逻辑3 end if;
循环-无条件循环-条件循环-for循环
--无条件循环 loop ...循环语句 [exit when 条件] end loop; --这种会进入死循环,一般加上限制条件 exit when 条件 --条件循环 while 条件 loop ...循环语句 end loop; --for循环,也是比较常用的一种循环 for [] in ... loop ...循环语句 end loop;
游标
是系统为用户开设的一个数据缓冲区,存放SQL查询的一个结果集
--在声明区声明游标 cursor cur_name is sql语句 --使用游标语法 open cur_name loop fetch cur_name into 变量 exit cur_name%notfound end loop; cose cur_name --for循环可以简化,就不需要open cose fetch exit了哟
存储函数
一般再多表关联可以使用存储函数
create [or replace] function fn_name ( 参数名 参数类型, 参数名 参数类型 ...) is [变量声明] begin ...业务逻辑 return 结果变量
[excelption
...异常处理] end;
存储过程
create [or replace] procedure pr_name ( 参数名 类型, 参数名 类型, 参数名 类型) as ...变量声明 begin ...业务逻辑 [exception ...异常处理] end; --参数的三种模式 --IN 传入参数(默认) --OUT 传出参数,主要用于返回程序运行结果 --IN OUT 传入传出参数
--调用存储过程
方式一
begin
pr_name()
end;
方式二
call pr_name();
触发器
自动执行的“存储过程”,会被Oracle自动调用
用于数据确认,实施复杂的安全检查、做审计、跟踪表上的数据操作,数据的备份和同步
分类:前置触发器(before)\ 后置触发器(after)
create [or replace] trigger tr_name befare | after [delete][[or] insert][[or] update [of 列名]] --在做什么操作触发,列名可以用逗号隔开 on table_name [for each row][where 条件] --for each row行级触发器 where 返回false true declare ...声明 begin ...程序块 end;
伪记录变量 :old :new
触发语句 | :old | :new |
insert | 所有字段都是null | 将要插入的数据 |
update | 更新以前该行的值 | 更新后的值 |
delete | 删除以前该行的值 | 所有字段都是null |