当前位置: 首页 > news >正文

二十三、oracle pl/sql分类三 包

包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。
1)、我们可以使用create package命令来创建包,如:
i、创建一个包sp_package
ii、声明该包有一个过程update_sal
iii、声明该包有一个函数annual_income

--声明该包有一个存储过程和一个函数
create package sp_package is
procedure update_sal(name varchar2, newsal number);
function annual_income(name varchar2) return number;
end;

  

2)、建立包体可以使用create package body命令
给包sp_package实现包体

CREATE OR REPLACE PACKAGE BODY SP_PACKAGE IS
--存储过程
PROCEDURE UPDATE_SAL(NAME VARCHAR2, NEWSAL NUMBER) IS
BEGIN
UPDATE EMP SET SAL = NEWSAL WHERE ENAME = NAME;
COMMIT;
END;

--函数
FUNCTION ANNUAL_INCOME(NAME VARCHAR2) RETURN NUMBER IS
ANNUAL_SALARY NUMBER;
BEGIN
SELECT SAL * 12 + NVL(COMM, 0) INTO ANNUAL_SALARY FROM EMP WHERE ENAME = NAME;
RETURN ANNUAL_SALARY;
END;
END;
/

    

3)、如何调用包的过程或是函数
当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其它方案的包,还需要在包名前加方案名。如:

--调用存储过程
SQL> exec sp_package.update_sal('SCOTT', 8888);
--调用函数
var income NUMBER;
CALL sp_package.ANNUAL_INCOME('SCOTT') INTO:income;
print income;

特别说明:包是pl/sql 中非常重要的部分,我们在使用过程分页时,将会再次体验它的威力呵呵。

 

触发器
触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定触发的事件和触发的操作,常用的触发事件insert,update,delete 语句,而触发操作实际就是一个pl/sql 块。可以使用create trigger 来建立触发器。
特别说明:我们会在后面详细为大家介绍触发器的使用,因为触发器是非常有用的,可维护数据库的安全和一致性。

相关文章:

  • 自己写的一部分斗地主的程序,没有去写界面,临时是用黑框来显示的
  • 《计算机网络(第五版)》中学习理论与实践
  • ADB操作命令相关
  • IBM云对象存储Cleversafe 大力拓展全新战场
  • ETHERCHANNEL的配置
  • 使用 FreeMarker 替换 JSP 的 10 个理由
  • flex中textinput限制输入长度与某些字符
  • RxJava 2.x 使用最佳实践
  • 在Cisco路由器上实现PPTP server及 Radius认证
  • svn用户权限管理
  • Oracle数据库管理之创建和删除数据库
  • 浮点数溢出错误
  • BufferedReader的mask和reset
  • nginx学习1
  • 基于VML/SVG配电站接线系统
  • [deviceone开发]-do_Webview的基本示例
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Apache Zeppelin在Apache Trafodion上的可视化
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java 网络编程(2):UDP 的使用
  • Java程序员幽默爆笑锦集
  • Kibana配置logstash,报表一体化
  • LeetCode29.两数相除 JavaScript
  • miaov-React 最佳入门
  • nginx 负载服务器优化
  • Python_网络编程
  • python学习笔记 - ThreadLocal
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Redis字符串类型内部编码剖析
  • spring boot下thymeleaf全局静态变量配置
  • Spring-boot 启动时碰到的错误
  • 番外篇1:在Windows环境下安装JDK
  • 删除表内多余的重复数据
  • 实现简单的正则表达式引擎
  • 优化 Vue 项目编译文件大小
  • 阿里云移动端播放器高级功能介绍
  • ​什么是bug?bug的源头在哪里?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #git 撤消对文件的更改
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)(4.6) Triducer
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (done) 两个矩阵 “相似” 是什么意思?
  • (搬运以学习)flask 上下文的实现
  • (蓝桥杯每日一题)love
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (十一)手动添加用户和文件的特殊权限
  • (四)模仿学习-完成后台管理页面查询
  • (转)shell调试方法
  • (转)Sublime Text3配置Lua运行环境
  • (转)VC++中ondraw在什么时候调用的
  • ***检测工具之RKHunter AIDE
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)