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包和包体以及与非包体定义函数、过程的区别相关推荐

  1. oracle 包和包体禁用,Oracle包和包体以及与非包体定义函数、过程的区别

    Oracle包和包体以及与非包体定义函数.过程的区别. 1.Oracle中的包和包体 Oracle中的包和包体与java中的接口和类才关系特别类似,我们就根据对比学习一下包和包体吧! 2.oracle ...

  2. Oracle优化07-分析及动态采样-DBMS_STATS 包

    思维导图 07系列文章 Oracle优化07-分析及动态采样-直方图 Oracle优化07-分析及动态采样-DBMS_STATS 包 Oracle优化07-分析及动态采样-动态采样 DBMS_STAT ...

  3. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理

    介绍Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断或关机后,重新开机,运行数据库 ...

  4. ORACLE安装启图形界面与oracle安装介质解压后缺jar包

    8月25日-8月27日,三天就安装一套oracle 10.2.0.5 for AIX 6100 HA双机,安装过程中真是问题很多.     首先,是启动OUI图形界面,安装是在机房直连网卡进行的,使用 ...

  5. mysql榨包是什么意思_模块与包 Mysql与Oracle区别

    1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码( ...

  6. osgi导出包和非导出包_了解如何解决OSGI捆绑包

    osgi导出包和非导出包 我想回顾一下OSGI包如何解决并使用Apache Karaf进行演示. Karaf是基于Apache Felix内核的功能齐全的OSGI容器,并且是Apache Servic ...

  7. html 请求体 响应体,Http协议抓包详解

    抓包分析:GET方式: * 请求部分: GET /day09/demo1-http/demo2.html?name=aaa&age=23 HTTP/1.1 Accept: text/html, ...

  8. python中__init__导入失败_python - 如何使用__init__.py修复“在非包中尝试相对导入”...

    python - 如何使用__init__.py修复"在非包中尝试相对导入" 我正在尝试遵循PEP 328,具有以下目录结构: pkg/ __init__.py component ...

  9. oracle 内置程序包,建立程序包的方法,程序包中使用游标,常用程序包

    文章目录 1. 程序包 1.1 程序包定义 1.2 程序包创建 1.3 程序包中的游标 1.4 有关程序包的信息 2. 内置程序包 3. DBMS_JOB包 4. UTL_FILE包 1. 程序包 1 ...

最新文章

  1. c语言27除以4,2014计算机等级二级C语言精讲习题及答案 4
  2. url 编码 与 接口签名
  3. sprint冲刺计划第七天团队任务
  4. 【Numpy 学习记录】np.stack 和 np.concatenate
  5. 【转】17.Qt界面布局管理详解
  6. php操作mysql数据库
  7. 语法分析-C语言程序
  8. 软件测试之python面试题_常见Python面试题整理带答案
  9. 在 Chrome 调试 Javascript
  10. 李开复:2018中国最大AI红利?是政策
  11. 国内电影发行公司简介
  12. 实践出真知:微服务经验之避坑指南
  13. 办公技巧:分享100个Excel快捷键,值得收藏!
  14. 参考文献显示DOI以及DOI颜色的设置
  15. 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
  16. 日记app(1.0)进展报告
  17. Android蓝牙通信
  18. 重谈联想5G编码投票事件
  19. 直观打印二叉树的图形
  20. python练习——实现质数检测,编写isprime()函数,参数为整数,并且需要有异常处理功能。

热门文章

  1. python绘图—— matplotlib
  2. 波卡链Substrate (5)托盘Pallets进阶
  3. C++ Primer 5th笔记(chap 18 大型程序工具)虚继承
  4. django中序列化、反序列化过程
  5. mac包安装kafka
  6. 内核层CS段描述符信息
  7. RtlAdjustPrivilege 一行代码提升进程权限
  8. linux编译llvm代码
  9. 001 JAVA基础
  10. MySQL创建索引(CREATE INDEX)