Oracle包和包体以及与非包体定义函数、过程的区别
1.Oracle中的包和包体
Oracle中的包和包体与java中的接口和类才关系特别类似,我们就根据对比学习一下包和包体吧!
2.oracle包和包体与自定义函数,过程区别
- 2.1 如果直接create 函数,函数不会出现在包里,而是在function目录下面,如果在包里创建,则会出现在包里,他们两者有什么区别?
答:
1)直接创建的函数,是数据公共函数。在调用函数的时候直接调用函数名带上参数就可以。2)而建在包体里的函数是私有函数,在有在包体里才能直接用函数名带参数调用。
外部程序要调用需要--包名.函数名(参数)--这样去调用。
3.创建Oracle包以及实现包
sql语句如下:
-- 包(pakage)和包体(package body)
-- 首先创建一个包含字段comm的emp表,再创建下面的包和包体create or replace package test_package
is-- 声明全局变量:默认奖金数额g_comm number:=100;-- 声明存储过程:用于重置奖金数额procedure proc_reset_comm(p_comm in number);-- 声明函数:用于求所有员工中最高工资function func_maxsal_emp return number;
end test_package;
/create or replace package body test_package
is -- 实现存储过程procedure proc_reset_comm(p_comm in number)isbeginif nvl(p_comm,0)>g_comm theng_comm:=p_comm;end if;dbms_output.put_line(g_comm);end proc_reset_comm;-- 实现函数function func_maxsal_emp return numberisv_maxsal emp.sal%type;beginselect max(sal) into v_maxsal from a_emp;return v_maxsal;end func_maxsal_emp;
end;
/-- 测试包和包体
exec test_package.proc_reset_comm(111);
select test_package.func_maxsal_emp() from dual;
测试是否可以在包体里创建自定义函数
-- 一个已经创建好的自定义函数
-- 编写将字符串倒叙排列的函数:比如输入abc 返回cba
create or replace function func_reverse_abc(str varchar2) return varchar2
is
v_length number(4); --字符串的长度
v_temp varchar2(1); --截取的单个字符
v_result varchar2(1000); --处理后的结果
begin-- 计算字符串长度select length(str) into v_length from dual;-- 使用循环倒叙字符串for i in reverse 1..v_length loopv_temp := substr(str,i,1);v_result:=v_result||v_temp;end loop; return v_result;
end;
/
select func_reverse_abc('abc') from dual;--------------------------------------------------------------------------- 现在将自定义函数合并到上面的创建的包和包体中-- 包(pakage)和包体(package body)
create or replace package test_package
is-- 声明全局变量:默认奖金数额g_comm number:=100;-- 声明存储过程:用于重置奖金数额procedure proc_reset_comm(p_comm in number);-- 声明函数:用于求所有员工中最高工资function func_maxsal_emp return number;
end test_package;
/create or replace package body test_package
is -- 1.实现存储过程procedure proc_reset_comm(p_comm in number)isbeginif nvl(p_comm,0)>g_comm theng_comm:=p_comm;end if;dbms_output.put_line(g_comm);end proc_reset_comm;-- 2.实现函数function func_maxsal_emp return numberisv_maxsal emp.sal%type;beginselect max(sal) into v_maxsal from a_emp;return v_maxsal;end func_maxsal_emp;------------------------------------------------------- 包中没有的,自定义函数 此处使用create function就直接报错,故删除createfunction func_reverse_abc(str varchar2) return varchar2isv_length number(4); --字符串的长度v_temp varchar2(1); --截取的单个字符v_result varchar2(1000); --处理后的结果begin-- 计算字符串长度select length(str) into v_length from dual;-- 使用循环倒叙字符串for i in reverse 1..v_length loopv_temp := substr(str,i,1);v_result:=v_result||v_temp;end loop; return v_result;end func_reverse_abc;
end;
/-------------------------------------------------------------------------
-- 结果说明:在编译运行包和包体时,没有报任何错误
-- 但是在测试自定方法是报错,无法调用这个自定义方法
-- 结论:不能在包体中自定义包中不存在的函数和过程-- 测试包和包体
exec test_package.proc_reset_comm(111);
select test_package.func_maxsal_emp() from dual;
-- 自定义函数测试(前缀加包名,也测试不成功)
select func_reverse_abc('abc') from dual;
Oracle包和包体以及与非包体定义函数、过程的区别相关推荐
- oracle 包和包体禁用,Oracle包和包体以及与非包体定义函数、过程的区别
Oracle包和包体以及与非包体定义函数.过程的区别. 1.Oracle中的包和包体 Oracle中的包和包体与java中的接口和类才关系特别类似,我们就根据对比学习一下包和包体吧! 2.oracle ...
- Oracle优化07-分析及动态采样-DBMS_STATS 包
思维导图 07系列文章 Oracle优化07-分析及动态采样-直方图 Oracle优化07-分析及动态采样-DBMS_STATS 包 Oracle优化07-分析及动态采样-动态采样 DBMS_STAT ...
- Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理
介绍Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断或关机后,重新开机,运行数据库 ...
- ORACLE安装启图形界面与oracle安装介质解压后缺jar包
8月25日-8月27日,三天就安装一套oracle 10.2.0.5 for AIX 6100 HA双机,安装过程中真是问题很多. 首先,是启动OUI图形界面,安装是在机房直连网卡进行的,使用 ...
- mysql榨包是什么意思_模块与包 Mysql与Oracle区别
1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码( ...
- osgi导出包和非导出包_了解如何解决OSGI捆绑包
osgi导出包和非导出包 我想回顾一下OSGI包如何解决并使用Apache Karaf进行演示. Karaf是基于Apache Felix内核的功能齐全的OSGI容器,并且是Apache Servic ...
- html 请求体 响应体,Http协议抓包详解
抓包分析:GET方式: * 请求部分: GET /day09/demo1-http/demo2.html?name=aaa&age=23 HTTP/1.1 Accept: text/html, ...
- python中__init__导入失败_python - 如何使用__init__.py修复“在非包中尝试相对导入”...
python - 如何使用__init__.py修复"在非包中尝试相对导入" 我正在尝试遵循PEP 328,具有以下目录结构: pkg/ __init__.py component ...
- oracle 内置程序包,建立程序包的方法,程序包中使用游标,常用程序包
文章目录 1. 程序包 1.1 程序包定义 1.2 程序包创建 1.3 程序包中的游标 1.4 有关程序包的信息 2. 内置程序包 3. DBMS_JOB包 4. UTL_FILE包 1. 程序包 1 ...
最新文章
- c语言27除以4,2014计算机等级二级C语言精讲习题及答案 4
- url 编码 与 接口签名
- sprint冲刺计划第七天团队任务
- 【Numpy 学习记录】np.stack 和 np.concatenate
- 【转】17.Qt界面布局管理详解
- php操作mysql数据库
- 语法分析-C语言程序
- 软件测试之python面试题_常见Python面试题整理带答案
- 在 Chrome 调试 Javascript
- 李开复:2018中国最大AI红利?是政策
- 国内电影发行公司简介
- 实践出真知:微服务经验之避坑指南
- 办公技巧:分享100个Excel快捷键,值得收藏!
- 参考文献显示DOI以及DOI颜色的设置
- 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
- 日记app(1.0)进展报告
- Android蓝牙通信
- 重谈联想5G编码投票事件
- 直观打印二叉树的图形
- python练习——实现质数检测,编写isprime()函数,参数为整数,并且需要有异常处理功能。