Oracle-存储过程、存储函数、触发器
Oracle-存储过程、存储函数、触发器
目录
文章目录
- 1、存储过程
- 1.1、概念
- 1.2、创建语法
- 1.3、实例
- 2、存储函数
- 3、out类型参数
- 4、存储过程与存储函数直接的区别
- 3、触发器
- ***后记*** :
内容
1、存储过程
1.1、概念
存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程名并给定参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
1.2、创建语法
create [or replace] procedure 过程名[(参数名 in/ out 数据类型)]as beginPLSQL 子程序体;end;
1.3、实例
示例: 给指定员工涨工资
create or replace procedure p_sal(eno emp.empno%type)asbeginupdate emp set sal = sal + 100 where empno = eno;commit;end;declarebeginp_sal(7733);end;
2、存储函数
定义格式:
create or replace function 函数名[(数据类型 in/out 数据类型)] return 返回值类型as变量 数据类型;beginPLSQL 子程序体;return 变量;end;
示例:计算指定员工的年薪
create or replace function f_yearsal(eno emp.empno%type) return number ass number(10);beginselect sal*12+nvl(comm, 0) into s from emp where empno = eno;return s;end;-- 测试declare begindbms_output.put_line(f_yearsal(7788));end;-- 结果:36000
3、out类型参数
存储过程实现计算指定员工的年薪
create or replace precedure p_yearsal(eno emp.empno%type, yearsal out number)as s number(10);c emp.comm%type;beginselect sal*12, nvl(comm, 0) into s, c from emp where empno = eno;yearsal := s + c;end;-- 测试declareyearsal number(10);beginp_yearsal(7788, yearsal);dbms_output.put_line(yearsal);end;
注意事项:out参数数据类型不能指定长度
4、存储过程与存储函数直接的区别
- 语法区别:
- 关键字不同
- 存储函数比存储过程多了2个return
- 本质区别
- 存储函数有返回值,而存储过程没有返回值
- 如果存储过程要实现由返回值的业务,必须使用out类型的参数
- 存储过程只是在存储过程内部给out类型的参数赋值,并没有返回值
- 使用存储函数有返回值的特性,我们可以自定义函数
3、触发器
概念:制定一个规则,在我们增删改操作的时候,只要满足规则,会自动触发,无须主动调用。
格式:
create or replace triggerbefore/after insert/update/delete [of 字段] on 表名[for each row]declarebeginPLSQL语句end;
对象
- :old:没更改之前的对象或者一条记录
- :new:更改之后的对象或者一条记录
在触发器中触发语句与伪记录变量的值
触发语句 | :old | :new |
---|---|---|
insert | 所有字段都为空(null) | 将要插入的数据 |
update | 更新之前该行的值 | 更新后的值 |
delete | 删除以前改行的值 | 所有字段都为空(null) |
- 分类
- 语句级触发器:没有for each row 的就是语句级触发器。
示例:学生表student插入新数据,显示欢迎新同学
create or replace trigger t_hi_iafter insert on studentdeclarebegindbms_output.put_line('欢迎新同学');end;
- 行级触发器:包含有for each row的就是行级触发器。
示例:不能给员工降薪
create or replace trigger t_u_salafter update of sal on empfor each rowdeclarebeginif :old.sal < :new.sal thenraise_applicaiton_error(-20001, '不能给员工降薪');end if;end;
- 典型应用:实现主键自增
- 示例:实现student表的主键id自增
创建序列
create sequence s_stu;
创建触发器
create or replace trigger t_pk_ibefore insert on studentfor each rowdeclare beginselect s_stu.nextval into :new.id from dual;end;-- 测试 自己测试
- 语句级触发器:没有for each row 的就是语句级触发器。
后记 :
所有的数据库测试,如果没有明确指定,都是使用scott用户下的4张表.
本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785
前端项目源代码地址:https://gitee.com/gaogzhen/vue-leyou
后端JAVA源代码地址:https://gitee.com/gaogzhen/JAVA
Oracle-存储过程、存储函数、触发器相关推荐
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表.---查询语句创建表 create table emp as ...
- WebDay18 MySQL存储过程 存储函数 触发器 事务
MySQL存储过程 存储函数 触发器 事务 一.MySQL存储过程和函数 1.存储过程和函数的概念 2.存储过程和函数的好处 3.存储过程和函数的区别 4.创建存储过程 5.调用存储过程 6.查看存储 ...
- oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解
本文实例讲述了oracle 存储过程.函数和触发器用法.分享给大家供大家参考,具体如下: 一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 创建存储过程 用CR ...
- oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门
文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...
- Day463.视图存储过程存储函数 -mysql
视图 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录 数据字典 就是系统表,存放数据库相关信息的表.系统表的数据通常由数据库系 ...
- MySQL表/视图/存储过程and函数/触发器/事件与数据库之间的关系
mysql中的数据库包含表.视图.存储过程and函数.触发器.以及事件. 数据库: 数据库是存放数据的仓库.数据库中的数据不是直接存在数据库中,而是存在数据库的表中 表(table): 表是数据库中存 ...
- oracle otl,使用OTL调用Oracle的存储函数
OTL介绍: OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++操控关系数据库的模板库,最新 版本4.0.104,参见,下载地址otl ...
- 视图存储过程存储函数
文章目录 视图 常见数据库对象 视图概述 为什么使用视图? 视图的理解 创建视图 创建单表视图 创建多表联合视图 基于视图创建视图 查看视图 更新视图的数据 一般情况 不可更新的视图 修改.删除视图 ...
- MySQL 案例实战--MySQL数据库 存储过程 存储函数
MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...
- oracle数据库存储函数,Oracle数据库存储过程
一.定义 所谓存储过程,就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.使用的时候,用户通过指定已经定义的存储过程名字并给相应的存储过程参数来调用并执行它,从 ...
最新文章
- Unity钢铁以及玻璃材质的选择
- 让你的名字在百度排名前列
- boost::pfr::detail::fields_count相关的测试程序
- java中的数组、队列、堆栈
- 在欲而无欲,居尘不染尘
- 写一个http服务器
- [Swift]LeetCode323. 无向图中的连通区域的个数 $ Number of Connected Components in an Undirected Graph...
- 微信开发——本地测试环境搭建
- ssh GSSAPIAuthentication 参数
- 使用JAVA的keytool生成jks证书,通过jks证书生成pfx证书,tomcat配置https
- 美国转基因食品的生产现状
- 用 Python 3 的 async / await 做异步编程
- 生产环境-linux-tomcat宕掉-乌龙事件
- 单片机c语言开发实验心得,单片机实训心得报告【三篇】
- matlab各向异性高斯核方向导数滤波器,基于各向异性高斯方向导数滤波器提取图像粗边缘的方法...
- ZenCart facebook 登陆
- javafx-更改程序图标
- 谷歌身份验证器二维码
- C++虚函数实现机制
- python控制各情况出现概率_python实现概率分布