Oralce数据库之存储过程、存储函数、触发器和数据字典
Oracle数据库总结
Oracle数据库之集合运算
Oracle数据库之数据处理
Oracle数据库之建表和管理表
Oracle数据库之对象视图、索引、序列、同义词
一、存储过程和存储函数
1、概念
存储在数据库中供所有用户程序调用的子程序,称为存储过程或者存储函数
2、存储过程语法
create [or replace] procedure 过程名(参数列表)
asplsql子程序体
实例1:
create or replace procedure sayhelloworld
as--说明部分
begindbms_output.put_line('Hello World');
end;
/
实例2:
--给指定的员工涨500,并且打印涨前和涨后的薪水
create or replace procedure raiseSalary(eno in number)
as--定义变量保存涨前的薪水psal emp.sal%type;
beginselect sal into psal from emp where empno=eno;update emp set sal = sal+500 where empno=eno;dbms_output.put_line('涨前:'||psal||' 涨后:'||(psal+100));end;
/
3、存储函数
函数为一命名的存储程序,可带参数,并返回一个计算值。函数和存储过程类似,但函数必须return子句用于返回值。函数说明必须指定函数名、结果值的类型和参数类型。
语法结构
create [or replace] function 函数名(参数列表)
return 函数值类型
as plsql子程序体
实例1:
--查询某个员工的年收入
create or replace function queryempincome(eno in number)
return number
as--月薪和奖金psal emp.sal%type;pcomm emp.comm%type;
beginselect sal,comm into psal,pcomm from emp where empno=eno;--返回年收入return psal*12+nvl(pcomm,0);
end;
/
实例2:
create or replace procedure queryempinfo(eno in number,pename out varchar2,psal out number,pjob out varchar2)
as
beginselect ename,sal,empjob into pename,psal,pjob from emp where empno=eno;end;
/
二、触发器
1、概念
数据库触发器是一个与表相关联的、存储的pl/sql程序。每当一个特定的数据操作语句(insert、delete、update)在指定的表上发出时,oracle自动的执行触发器中定义的语句序列。
2、触发器的类型
1)语句级触发器
在指定的操作语句之前或者是之后执行一次,不管这条语句影响了多少行。
2)行级触发器(for each row)
触发语句作用的每一条语句都会触发。
3、触发器语法
create [or replace] trigger 触发器名
{before|after}
{delete|insert|update[of 列名]}
on 表名
[for each row [when(条件)]]
pl/sql语句块
实例1:
--成功插入新员工后,自动打印“very good”create or replace trigger saynewemp
after insert
on emp
declare
begindbms_output.put_line('very good');
end;
/
实例2:
/*涨后的工资不能少于涨前的工资
*/
create or replace trigger checksalary
before update
on emp
for each row
begin--if 涨后的薪水 < 涨前的薪水 thenif :new.sal < :old.sal thenraise_application_error(-20002,'涨后的工资不能少于涨前的工资。涨前:'||:old.sal||' 涨后:'||:new.sal);end if;end;
/
三、数据字典
1、数据字典介绍
oracle数据字典是有表和视图组成的,存储有关数据库结构信息的一些数据库对象。数据库字典描述了实际数据是如何组织的。对它们可以象处理其他数据库表或视图一样进行查询,但不能进行任何修改。
Oracle数据库字典通常是在创建和安装数据库时被创建的,Oracle数据字典是Oracle数据库系统工作的基础,没有数据字典的支持,Oracle数据库系统就不能进行任何工作。
在Oracle数据库字典中,许多视图都有三个不同的实例,它们的前缀分别为"USER_"、"ALL_“及"DBA_”。"USER_"为前缀的数据库字典视图通常记录执行查询的帐户所拥有的对象的信息,"ALL_"为前缀的数据库字典视图通常记录包括执行查询的帐户所拥有的对象的信息及授权至PUBLIC的帐户用户所拥有的对象的信息,"DBA_"为前缀的数据库字典视图则包含所有数据库对象的信息,而不管其所有者。其他的字典视图中主要的是V视图,之所以这样叫是因为他们都是以V视图,之所以这样叫是因为他们都是以V视图,之所以这样叫是因为他们都是以V或GV开头的。V开头的。V开头的。V视图是基于X虚拟视图的。V虚拟视图的。V虚拟视图的。V视图是SYS用户所拥有的,在缺省状况下,只有SYS用户和拥有DBA系统权限的用户可以看到所有的视图,没有DBA权限的用户可以看到USER_和ALL_视图,但不能看到DBA_视图。与DBA_,ALL,和USER_视图中面向数据库信息相反,这些视图可视的给出了面向实例的信息。
在Oracle的绝大多数数据字典视图中都有象DBA_TABLES,ALL_TABLES和USER_TABLES这样的视图家族。Oracle中有超过100个视图家族,下表列出了最重要和最常用的视图家族,需要注重的是每个视图家族都有一个DBA_,一个ALL_一个USER_视图。
在Oracle中还有一些不常用的数据字典表,但这些表不是真正的字典家族,他们都是一些重要的单一的视图。这些视图见下表:
Oralce数据库之存储过程、存储函数、触发器和数据字典相关推荐
- WebDay18 MySQL存储过程 存储函数 触发器 事务
MySQL存储过程 存储函数 触发器 事务 一.MySQL存储过程和函数 1.存储过程和函数的概念 2.存储过程和函数的好处 3.存储过程和函数的区别 4.创建存储过程 5.调用存储过程 6.查看存储 ...
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表.---查询语句创建表 create table emp as ...
- MySQL表/视图/存储过程and函数/触发器/事件与数据库之间的关系
mysql中的数据库包含表.视图.存储过程and函数.触发器.以及事件. 数据库: 数据库是存放数据的仓库.数据库中的数据不是直接存在数据库中,而是存在数据库的表中 表(table): 表是数据库中存 ...
- MySQL 案例实战--MySQL数据库 存储过程 存储函数
MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...
- Day463.视图存储过程存储函数 -mysql
视图 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录 数据字典 就是系统表,存放数据库相关信息的表.系统表的数据通常由数据库系 ...
- 视图存储过程存储函数
文章目录 视图 常见数据库对象 视图概述 为什么使用视图? 视图的理解 创建视图 创建单表视图 创建多表联合视图 基于视图创建视图 查看视图 更新视图的数据 一般情况 不可更新的视图 修改.删除视图 ...
- 金仓数据库KingbaseES数据库中存储过程和函数的区别
关键字:存储过程 函数 KingbaseES数据库中存储过程和函数的区别如下表所示: 存储过程 函数 1 用于在数据库中完成特定的操作或者任务(如插入.删除等) 用于特定的数据(如选择) 2 程序头 ...
- 2021-08-18MySQL 第六章过程式数据库对象.23存储函数,触发器
6.2 存储函数 6.2.1 创建存储函数 create function语法如下: create function 存储过程名([参数...]) returns type [特征...] 存 ...
- 【Hbu数据库】第七周 数据库完整性 存储过程和函数
数据库完整性 实体完整性 定义实体完整性 实例完整性检查和违约处理 参照完整性 定义参照完整性 参照完整性检查和违约处理 用户定义完整性 属性上的约束条件 属性上约束条件的定义 元组上的约束条件 完整 ...
最新文章
- python实现平衡二叉树_LeetCode 110. 平衡二叉树 | Python
- CS本科毕业生能拿到45万年薪?
- azure devops中文显示乱码_【Azure DevOps系列】Azure DevOps生成代码覆盖率
- springBoot单元测试-模拟MVC测试
- php5.2.5 mysql_IIS6 下安裝 PHP5.2.5 和 MySQL5.0 及概念澄清
- java中的v递归的思想,Java中的递归思想 - osc_9lqilnv7的个人空间 - OSCHINA - 中文开源技术交流社区...
- 网站集成QQ登录功能
- 指针01:指针的定义与使用
- Solaris系统环境变量声明方法
- 部署calico网络的k8s集群
- 教程丨如何在AdsPower浏览器内快速配置UCloud 服务器
- H5C3第二个完整大项目————天猫国际首页跳转登录页
- 英语语法之后缀决定词性
- 无源微波器件--耦合线定向耦合器
- 面试被问“你未来的职业规划是什么”,怎样回答最完美?
- android获取sdcard文件,android读取SDCard任意路径下的文件
- 捣鼓小程序查询,后台SQL SERVER
- uniapp全局数据(全局url、全局openId)
- 使用VM安装安卓虚拟机
- MyBatis之Base64加密数据源
热门文章
- AB1601定时器1注意事项
- cmake (4)多个子目录
- C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断和引用
- Html 教程 (3)元素
- 区块链预言机(1)初识API网关
- 设计模式--命令(Command)模式
- python网络编程—TCP协议(二)
- 19-Realm Management Extension (RME)
- [gic]-ARM gicv3/gicv4的详细介绍-2020/12
- TEE Internal core API介绍(globalplatform)