包(package)
作用:逻辑对象的一种。对相关存储过程、函数、变量的封装。
a 封装,便于调用 b 统一授权
系统内置包:dbms_output。用于输出。
standard:常用的函数。异常的定义 自定义包:
包头:package。声明公有的函数、存储过程及公有变量。
包体:package body。实现包头声明的函数、存储过程。定义私有变量。
--调用系统的内置包
begin
sys.dbms_output.put_line('111');
sys.dbms_output.put_line(
sys.standard.LTRIM(' bbb ')
);
end; --创建自定义包。四则运算工具包
--创建包头
create or replace package my_math_pack
is
ver varchar2(20):='v0.1版本'; --声明并初始化公有变量
procedure showauthor; --声明1个公有存储过程。显示作者
function add(i number,j number)
return number; --声明1个公有函数。加法运算 function div(i number,j number)
return number; --声明1个公有函数。除法运算。
end; --创建包体
create or replace package body my_math_pack
is
-- 实现1个公有存储过程。显示作者
procedure showauthor
as
begin
dbms_output.put_line('作者:老白');
end; --实现1个公有函数。加法运算
function add(i number,j number)
return number
as
begin
return i+j;
end; --实现1个公有函数。除法运算。
function div(i number,j number)
return number
as
begin
return i/j;
end;
end; --调用自定义包 begin
--调用包里的函数
dbms_output.put_line(system.my_math_pack.add(8,9));
system.my_math_pack.showauthor();
--显示包的公有变量
dbms_output.put_line(system.my_math_pack.ver);
end; --练习
/*
创建自定义包 my_string_pack
包含 2个函数声明 函数1,返回2个字符串中,长度较长的那个
函数2,如果字符串2是字符串1的子串,返回1,否则返回0.
*/ create or replace package my_string_pack
is
function getlonger(str1 varchar2,str2 varchar2)
return varchar2;
function isexists(str1 varchar2,str2 varchar2)
return number;
end; create or replace package body my_string_pack
is
function getlonger(str1 varchar2,str2 varchar2)
return varchar2
as
begin
if (length(str1)>length(str2)) then
return str1;
else
return str2;
end if;
end;
function isexists(str1 varchar2,str2 varchar2)
return number
as
begin
if (instr(str1,str2)>'0') then
return 1;
else
return 0;
end if;
end;
end; begin
dbms_output.put_line(my_string_pack.getlonger('aaa','bbb'));
dbms_output.put_line(my_string_pack.isexists('aaa','bb'));
end; --- 案例2,创建my_emp_pack,对emp表进行如下操作
/*
1 存储过程,输出所有工资大于等于指定工资的员工号,员工姓名及工资
2 函数。获取指定部门号且岗位为"CLERK"的员工的最高工资
*/ --包头
create or replace package my_emp_pack
is procedure show_sal_greater_than(
in_sal number
) ; function get_max_sal(
v_deptno number
)return number;
end; --包体
create or replace package body my_emp_pack
is
procedure show_sal_greater_than(
in_sal number
)
as
--声明1个游标
cursor v_cur
is
select empno,ename,sal from scott.emp where sal>=in_sal;
v_eno scott.emp.empno%type;
v_ename scott.emp.ename%type;
v_sal scott.emp.sal%type;
begin
--打开
if (not v_cur%isopen) then
open v_cur;
end if;
--依次提取
loop
exit when (v_cur%notfound);
fetch v_cur into v_eno,v_ename,v_sal;
dbms_output.put_line('第'||v_cur%rowcount||':'||v_eno
||','||v_ename||','||v_sal);
end loop;
--关闭
close v_cur;
end; function get_max_sal(
v_deptno number
)return number
as
v_max number;
begin
select sal into v_max from scott.emp
where deptno = v_deptno and job='CLERK';
return v_max;
exception
when no_data_found then
dbms_output.put_line('找不到记录');
return -1;
end;
end; begin
--system.my_emp_pack.show_sal_greater_than('15000');
dbms_output.put_line(system.my_emp_pack.get_max_sal('40'));
end;

  

oracle---包--laobai的更多相关文章

  1. Oracle 包(Package)

    引用这位大大的: http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答:在一个大型 ...

  2. oracle包详解(二)【weber出品】

    一.重载子程序 PL/SQL中的重载功能: 1. 能够使用户创建两个或多个同名的子程序 2. 要求子程序的形式参数的数量,顺序或者数据类型不一样 3. 能够使用户使用不同的数据灵活的调用子程序 4. ...

  3. Oracle包的概念

    转自:http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答: 在一个大型项目中,可 ...

  4. oracle 包,函数,过程,块的创建和执行及在java中执行(转)

    SQL> create or replace procedure sp_guocheng1 is--如果有这个名字就替换  2  begin--执行部分  3  insert into guoc ...

  5. Oracle包和包体

    一.什么要使用包? 在一个大型项目中,可能有很多模块,而每个模块又有自己的过程.函数等.而这些过程.函数默认是放在一起的(如在PL/SQL中,过程默认都是放在一起 的,即Procedures中),这些 ...

  6. (转)Oracle 包(Package)

    本文转载自:http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答:在一个大型项目中 ...

  7. Oracle 包的学习

    (1)包是一种数据库对象,相当于一个容器.将逻辑上相关的过程.函数.变量.常量和游标组合成一个更大的单位.用户可以从其他 PL/SQL 块中对其进行引用 (2)包类似于C++和JAVA语言中的类,其中 ...

  8. maven本地添加Oracle包

    因为版权原因,Java后台连接数据库的ojdbc包并不可以用maven直接从网上下载导入,所以需要我们手动将其资源放在本地.下面是步骤: 1.找到Oracle ojdbc6包,拷贝到某备份目录2.包目 ...

  9. ORACLE 包[转]

    包的作用: 包可以将任何出现在块声明的语句 ( 过程 , 函数 , 游标 , 游标 , 类型 , 变量 ) 放于包中 , 相当于一个容器 .使用包的好处不仅仅是程序的分组管理,还可以使用包中的程序重载 ...

  10. oracle包概述(一)【weber出品】

    一.PL/SQL包概述 1. 什么是PL/SQL包: 相关组件的组合:PL/SQL类型.变量,数据结构,和表达式.子程序: 过程和函数 2. 包的组成部分: 由两部分组成: 包头 包体 3. 包的优点 ...

随机推荐

  1. 二胎上位之路:html5报表和原生报表的笑尿撕逼

    前段时间,小编和我们移动端产品经理之间发生了一场罕见的撕逼大战. (看到撕逼二字,估计读者朋友们来劲了,呵呵呵……) 事情起因是这样的.小编基于对客户需求以及同行产品的了解,发了一篇关于报表在各种屏幕 ...

  2. Tomcat 配置详解/优化方案

     转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置 ...

  3. Dynamics CRM 之ADFS 使用 SQL Server 的联合服务器场

    此拓扑用于 Active Directory 联合身份验证服务 (AD FS) 不同于使用 Windows 内部数据库 (WID) 部署拓扑,因为不会将数据复制到每台联合服务器场中的联合身份验证服务器 ...

  4. Undefined symbols for architecture arm64解决方案

    在iOS开发中经常遇到的一个错误是Undefined symbols for architecture arm64,这个错误表示工程某些地方不支持arm64指令集.那我们应该怎么解决这个问题了?我们不 ...

  5. Node.js 教程 05 - EventEmitter(事件监听/发射器 )

    目录: 前言 Node.js事件驱动介绍 Node.js事件 注册并发射自定义Node.js事件 EventEmitter介绍 EventEmitter常用的API error事件 继承EventEm ...

  6. Linux基础练习题

    1.列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可. [root@bj-1-160-enzhi ~]# who|cut -d ' ' -f 1|uniq -c 2 ro ...

  7. 30天的php学习之路——第一天开端

    因项目紧急只留给了我4周时间学习php.谨以此文记录我的php学习历程,仅供参考,若有错误请指正. 之前对php有过一些了解,一些语法和习惯和C#差距有些大,所以第一天准备对php中的符号有个全面的了 ...

  8. SCNU 2015ACM新生赛初赛【1006. 3D打印】解题报告

            题目链接详见SCNU 2015新生网络赛 1006. 3D打印 .出题思路来自codevs 3288. 积木大赛,属于模拟题.         首先我们把“选择从第L部分到第R部分”理 ...

  9. [No000093]按住Alt 再按数字键敲出任意汉字和字符!

    1.在notepad里,(中文系统下) 按住Alt 然后按52946最后放开Alt 按住Alt 然后按45230最后放开Alt 按住Alt 然后按50403最后放开Alt 你会看到"我爱你& ...

  10. [NOI2006] 最大获利

    [NOI2006] 最大获利 ★★★☆   输入文件:profit.in   输出文件:profit.out   简单对比时间限制:2 s   内存限制:512 MB [问题描述] 新的技术正冲击着手 ...