oracle007:存储过程,自定义函数,触发器

一,存储过程:
就是给pl/sql块起个名字,封装了这些逻辑代码,面向的是过程编程!

  • 新建一个存储过程:
    在这里插入图片描述
    1,在dos命令窗口执行一个存储过程:
 set serveroutput on;
 exec zss;

2,在sql窗口调用存储过程:把zss当做一个方法调用。

declare
begin
zss();
end;
  • 存储过程还可以传参,传参有3中
  • 只进不出型:(in)参数只传进去,不传出来,只可以手动往里面加,不能在存储过程里面改,一改就报错
    在这里插入图片描述
  • 只出不进型:(out):这时只按照存储过程里面的参数为基准,虽然你也传了参数,但是你传进去的参数不会运行。
    在这里插入图片描述
    结果:
    在这里插入图片描述
  • 默认就是参数有进有出:(in out),传进去一个参数。必然有一个参数响应传出来。求一个数的开方。
    在这里插入图片描述
    二,两种调用存储过程的方法:
    注意:形参varchar不需要定义大小,因为才要进去捞值,不能限制它的大小
    案例:输入员工编号,给员工涨工资
    10部门涨10%;
    20部门涨20%;
    30部门涨30%;
    40部门涨40%;
    输出涨后的工资
    涨工资存储过程:
    在这里插入图片描述
    1,sql窗口调用涨工资存储过程:一个是实参,进去参加存储过程,一个是形参,只做一个定义
    在这里插入图片描述
    2,java调用涨工资存储过程:
  • 注意:程序运行的时候,会在ct.executeUpdate();阻塞,因为sql客户端调用存储过程后会自动上乐观锁。等到它commit提交释放锁之后java才能执行,而java是自动提交释放锁的,所以java不需要释放锁,sql客户端也可以执行。

在这里插入图片描述

  • 存储过程和视图的区别
    存储过程是面向过程编码,视图是面向查询结果
    存储过程里可以写pl/sql ,视图里只能写sql

**三,自定义函数:**自定义一个平方函数
在这里插入图片描述
注意:定义一个number类型,就返回一个number类型。
调用函数:

select pingfang(5) from dual;
  • 自定义函数和存储过程的区别
    1:函数必须有返回值,并且只能有一个返回值,存储过程没有返回值,但是有出参, 可以有多个出参
    2:函数只能通过select语句去调用,存储过程可以通过3种方式调用(sql窗口,dos窗口,java)

四,触发器
时间模型,针对 一个事件可以触发一个响应,就比如before触发,执行事件前先要执行触发器
1,创建一个触发器:
在这里插入图片描述
在执行插入语句之前,触发器先执行,然后再插入。这是before,还有after(在执行之后执行触发器)等不常用的触发器

  • 语句触发器
    练习:银行上班期间,9-17上班,在这之外不办理业务,提示系统已关闭!(触发器在语句执行之前先执行,如果不在上班范围期间,报一个错)
    在这里插入图片描述
    这里可以给添加,删除,修改都加上触发器。报出如下错误,如果想测试成功操作,判断between and 之前加not即可。
insert into dept values(80,'ass','zzdd')

在这里插入图片描述

  • 行级触发器:
    语句触发器和行级触发器的区别:

行级触发器对DML语句影响的每个行执行一次. 语句级触发器对每个DML语句执行一次, (如果一条insert语句在一个表中插入500行, 那么这个表的语句级触发器只执行一次, 而行级触发器要执行500次) 可以按字面意思理解: 行级触发器针对行, 语句级触发器针对语句(一个语句可以包含多行).

案例:给员工涨工资,不能低于之前的工资,否则就报错!
在这里插入图片描述

before update of sal on emp  //代表在修改emp下的sal之前触发
for each row  //代表作用与每一行的sal
if(:new.sal<:old.sal)  //如果新值小于旧值

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值