Oralce数据库之存储过程、存储函数、触发器和数据字典

2023-12-15 10:18

本文主要是介绍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数据库之存储过程、存储函数、触发器和数据字典的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/496099

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数