包(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. MBTiles

    MBTiles Specification MBTiles is a specification for storing tiled map data in SQLite databases for ...

  2. VS2012 Unit Test——Microsoft Fakes入门

    如题,本文主要作为在VS2012使用Fakes的入门示例,开发工具必须是VS2012或更高版本. 关于Fakes的MSDN地址:http://msdn.microsoft.com/en-us/libr ...

  3. Angular版本1.2.4在IE11的IE8模式下出错解决方案

    今天,群里一个兄弟抛出一个问题(如上),截图说明. 打断点调试下,貌似是console里面的log方法出错了,如下: 这个是console的log方法,为什么错呢,继续: 我们会发现,在这里是检测fu ...

  4. visual studio自动导入 using 的快捷键

    快捷键是  shift + alt + f10 ,从 vs 2012开始 还增加了 ctrl+.  功能名称叫: 视图.显示智能标记

  5. Learning the standard of C++11

    It's a very useful website of en.cppreference.com. It lists a huge number of information about the l ...

  6. github page+jekyll搭博客初体验

    div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin: 0 0 10px; padding ...

  7. CANopen学习——协议栈

    协议,是双方都提前商量好的通讯约定. 例如:发送1代表灯亮,发送0代表灯灭. 但由于只是单bit的0和1在通信时,抗干扰太弱,且多种控制时不能区分,此时扩展一下协议. 例如:  头      地址   ...

  8. Spring JavaMail发送邮件

    JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是 ...

  9. Go语言开发第一个Hello,World

    在网上看到go语言的各种评价,也是闻名已久,但是没有自己实践过,也不知道它的好,它的坏,今天就来试试第一个小程序 第一步.如何下载 1)下载go安装程序 下载地址:https://golang.org ...

  10. [LeetCode] Inorder Successor in BST 二叉搜索树中的中序后继节点

    Given a binary search tree and a node in it, find the in-order successor of that node in the BST. No ...