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)

is

begin

if nvl(p_comm,0)>g_comm then

g_comm:=p_comm;

end if;

dbms_output.put_line(g_comm);

end proc_reset_comm;

-- 实现函数

function func_maxsal_emp return number

is

v_maxsal emp.sal%type;

begin

select 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 loop

v_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)

is

begin

if nvl(p_comm,0)>g_comm then

g_comm:=p_comm;

end if;

dbms_output.put_line(g_comm);

end proc_reset_comm;

-- 2.实现函数

function func_maxsal_emp return number

is

v_maxsal emp.sal%type;

begin

select max(sal) into v_maxsal from a_emp;

return v_maxsal;

end func_maxsal_emp;

-----------------------------------------------------

-- 包中没有的,自定义函数 此处使用create function就直接报错,故删除create

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 loop

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

  1. oracle 包和包体禁用,ORACLE中的包和包体

    用一个增删改查用户的例子来演示包(java中接口)和包体(java中实现类) 创建包 create or replace package pkg_userinfoService as --定义用户的结 ...

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

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

  3. oracle rodm包,由重启引起的Oracle RAC节点宕机分析及追根溯源

    作者介绍 裴征峰,现就职于北京海天起点,二线专家成员,南京办事处负责人,OCP 10g.OCP 11g.OCM11g.超八年Oracle服务经验,擅长数据库故障诊断和性能调优.目前主要从事客户的现场维 ...

  4. oracle包如何进入编辑,修改 Oracle 的process和Session

    1.process 和session的概念: process:这个参数限制了能够连接到SGA的操作系统进程数(或者是Windows 系统中的线程数),这个总数必须足够大,从而能够适用于后台进程与所有的 ...

  5. oracle 将包赋权给用户,oracle数据库如何创建用户和角色,并给其赋权?

    一.创建用户并赋予权限 1.创建用户 create user wangxiangyu identified by wangxiangyu; 2.赋权 grant dba to wangxiangyu; ...

  6. ibm aix 抓包命令_在IBM AIX上模拟丢弃的TCP / IP数据包

    本文介绍: AIX内核扩展,允许来往于指定主机的指定百分比的TCP / IP数据包被随机丢弃,以模拟不利的网络状况. 加载,激活和卸载内核扩展的实用程序. C和Java™实用程序,用于监视到达目标主机 ...

  7. R语言gganimate包创建可视化gif动图、可视化动图:、gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点

    R语言gganimate包创建可视化gif动图.可视化动图:.gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点 目录

  8. 我的世界html导入整合包教程,《我的世界手机版》如何制作一个整合包教程攻略...

    今天当乐网小编要给大家分享的是一个我的世界手机版整合包的制作教程: 我的世界手机版中,很多玩家可能还不会使用单独的材质包以及存档等等,这个时候就会有比较有爱的玩家制作出整合包分享出来,整合包直接安装 ...

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

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

最新文章

  1. 查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
  2. JavaScript精要
  3. Android开发之AlertDialog设置左右边距的间接办法
  4. Spring–设计领域模型和服务层
  5. observable_Java Observable notifyObservers()方法与示例
  6. 高并发架构解决方案总结
  7. 今夜,昆山请将我遗忘 2009-01-06 01:59
  8. Unity3D开发之NGUI点击事件穿透响应处理
  9. RHEL5.0 搭建DNS服务器
  10. HAL库 STM32 串口通信函数
  11. Hexo博客搭建之Next主题的安装与设置
  12. Android Studio+SDK+tools下载、安装、配置及应用程序运行(详细,亲测)
  13. 容错性设计原则(一)
  14. 网易邮箱发送显示服务器出错,网易邮件发送不出去的错误代码详解 (MI:SFQ错误等)...
  15. java写关于温度的算法_摄氏温度和华氏温度的转换之java算法
  16. dnplayerext2文件夹删不掉怎么解决
  17. iP138版 iP地址 离线iP数据库 ip.dat详解
  18. linux定时压缩脚本,使用shell脚本对日志文件进行定时压缩
  19. 【推荐】2020,2021网易数字+大会(云原生微服务+大数据数据库+网易AI实践集合+其他) - (共187份)
  20. 转:理想主义终结年代的七种兵器

热门文章

  1. js中将html文档写入静态界面当中
  2. windows 域的安装方法
  3. oracle 表查询(二)
  4. 逻辑分析题汇总(一)
  5. oracle--索引--
  6. AndroidStudio开发环境安装及配置
  7. Qt之QFileIconProvider
  8. BZOJ 1006: [HNOI2008]神奇的国度( MCS )
  9. JAVA魔法堂:折腾Mybatis操作SQLite的SQLException:NYI异常
  10. MSN登录问题:Error 80072ee7