oracle 包 简单使用
理解PL/SQL包
简介
包(package)的主要作用是用于逻辑组合相关的PL/SQL类型
比如记录类型或者集合类型,PL/SQL游标或游标声明以及PL/SQL子程序
还可以包含任何可以在块的声明区中定义的变量
或者说是
将功能或业务相似的存储过程,函数
以及类型等进行一个封装
包的组成
一个PL/SQL包由如下两部分组成
- 包规范(包声明)
包规范: 主要是包的一些定义信息,不包含具体的代码实现部分
也可以说包规范是PL/SQL程序和其他应用程序的接口
包含类型,记录,变量,常量,异常定义,游标和子程序的声明
- 包体
包体是对包规范中声明的子程序的实现部分
包体的内容对于外部应用程序来说是不可见的
包体就像是一个黑匣子一样,是对包规范的实现
包的优点
- 1模块化设计
通过将逻辑相关的类型,常量,变量,异常和子程序放到一个命名的
pl/sql模块中,使得每一个包都容易理解,有助于模块化程序的开发
使得包与包之间的接口简单,清晰
- 2规范化的程序设计
在基于包的应用程序设计时,可以首先规划并在包规范中定义包需要提供的功能
即便当前并没有实现包体,也可以编译包规范部分
然后引用该包的存储子程序会被编译
- 3实现信息的隐藏
包规范中定义的常量,变量和异常及子程序等时公有的,可以被外部访问
可以规划将哪些内容公开给外部进行调用
如果不想对外公开,可以在包体中定义这些内容,这样就可以实现信息的隐藏
- 4提供全局共享的附加功能
在包中公开的变量或游标在一个会话期会一直存在
因此可以将包中定义的变量当做全局变量来使用
- 5提供了良好的性能体验
由于在首次打开包子程序时,整个包都会被加载到内存中
因而后续的调用只需要从内存中读取而不需要再次读取磁盘,
提供了较好的性能
包规范
语法
create or replace package 包名
is
--声明变量
--声明常量
--类型的定义
--游标的定义
--声明存储过程
procedure 存储过程名[(参数 in|out|in out 类型,..)];
--声明函数
function 函数名[(参数 类型,...)] return 返回值类型;
end[包名];
创建一个包规范
create or replace package pk1
is
--声明一个变量
s varchar2(50);
--声明一个常量
T constant varchar2(10):='TAB_';
--定义一个集合类型
type ity is table of varchar2(30);
--声明一个存储过程
procedure p1;
--声明函数
function fn(n number) return number;
end pk1;
包体
语法
create or replace package body 包名
is
--声明私有对象
--声明私有变量
--声明私有常量
--私有函数或存储过程
--公有对象的实现
end[包名];
注意:
包名,和包声明的名字一样
私有对象只能在包体内部调用,在最前面声明
创建一个包体
create or replace package body pk1
is
--声明变量
ss varchar(50);
--乘法表
procedure p1
is
begin
for i in 1..9 loop
for j in 1..i loop
dbms_output.put(i||'*'||j||'='||i*j);
end loop;
dbms_output.put_line('');
end loop;
end;
--阶乘
function fn(n number) return number
is
--声明一个变量保存阶乘
s number(10) :=1;
begin
for i in 1..n loop
s:=i*s;
end loop;
return s;
end;
end;
调用
调用1
begin
pk1.s:=3;
dbms_output.put_line(pk1.s);
end;
输出1
3
调用2
begin
pk1.ss:=3;
dbms_output.put_line(pk1.ss);
end;
输出2
ORA-06550: 第 2 行, 第 7 列:
PLS-00302: 必须声明 'SS' 组件
变量ss在包体中声明,外部程序不能访问
调用3
begin
pk1.p1();
end;
输出3
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81
调用&&输出4
SQL> select pk1.fn(4) from dual;
PK1.FN(4)
----------
24
oracle 包 简单使用的更多相关文章
- linux/windows系统oracle数据库简单冷备同步
linux/windows系统oracle数据库简单冷备同步 我们有一个财务系统比较看重财务数据的安全性,同时我们拥有两套系统,一个生产环境(linux),一个应急备份环境(windows).备份环境 ...
- ORACLE 数据库简单测试
ORACLE 数据库简单测试 操作系统:Windows 7 – ORACLE:oracle database 10.2.0.4 一.目的 测试 启动监听程序.数据库 非同一个用户的情况,用户是否可以 ...
- Oracle 最简单的随系统自己主动启动
Oracle 最简单的随系统自己主动启动 俗话说用户是上帝,他们有时候提出一个问题很的简单,就仅仅须要一句话,一分钟就完事了.可是拿到我们DBA来说,可能至少得半个小时甚至半个月才干满足他的一句话.有 ...
- oracle 游标简单案例
oracle 游标简单案例 一.案例: DECLARE IDO NUMBER; DABH CHAR); t_count ); CURSOR TJ_CURSOR IS SELECT IDO,DABH ...
- Java.util包简单总结
Java.util包简单总结 1. util包的框架 常用的集合类主要实现两个“super接口”而来:Collection和Map. 1.1 Collection有两个子接口:List和Set è¿é ...
- oracle创建简单的包
--规范 create or replace package test_pkg is --test_pkg为包名 procedure showMessage; --声明一个过程 function my ...
- MariaDB二进制包简单安装部署
一.简介: MySQL最早是由Michael Widenius在所研发,而在后来Michael先生以10亿美元的价格把MySQL卖给了SUN以后不久SUN就被Oracle公司给收购了,在Oracle收 ...
- golang json 包简单分析
首先上代码: func main() { b := true a1, _ := json.Marshal(b) a2, _ := Marshal(b) fmt.Println(string(a1)) ...
- Oracle 包(Package)
引用这位大大的: http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包? 答:在一个大型 ...
随机推荐
- 学习iOS设计--iOS8的颜色、文字和布局学习
在去年,Apple针对新时代用户彻底更新了其设计语言.现在的设计语言相对之前大为简化,能够让设计师将精力集中到动画和功能上,而不是繁复的视觉细节上. 很多人都曾问过我:设计应当如何入门?成为一名优秀设 ...
- SQL Server 记录(更新中...)
sys.databases 显示所有数据库信息 sys.tables 显示当前数据库所有的表的信息 Go 向 SQL Server 实用工具发出一批 Transact-SQL 语句已结束的信号,Go本 ...
- 使用pip出现 cannot import name "main"
最近在linux使用pip install时遇到了这个报错 1.jpg ImportError: cannot import name main 遇到这个问题,我的解决办法是:cd 到usr/bin目 ...
- JavaScript —— 给函数参数设置默认值
一.ES5 function fn(x, y){ y = y || 20; console.log(x, y); } fn(); // undefined 20 fn(5); // 5 20 fn(5 ...
- Java练习 SDUT-3339_计算长方形的周长和面积(类和对象)
计算长方形的周长和面积(类和对象) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 设计一个长方形类Rect,计算长方形 ...
- @codeforces - 932F@ Escape Through Leaf
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 个点的树(标号1~n),以结点 1 为根.每个结点 ...
- Mysql Command
数据库备份: mysqldump -uroot -p -h 192.168.1.190 --default-character-set=utf8 $dbname > backup_db.sql ...
- 【错误收集】JDK的安装 2016-02-03 14:35 725人阅读 评论(23) 收藏
自己的jdk是根据视频的指示来安装的,首先打开网址www.java.sun.com,然后找到java se的下载,根据自己的机器系统来下载安装包,如下图: 将安装包下载好之后,双击进行安装,根据提示进 ...
- 10Redis键空间通知(keyspace notifications)
Redis的键空间通知(keyspace notifications)功能是自2.8.0版本开始加入的,客户端可以通过订阅/发布(Pub/Sub)机制,接收那些以某种方式改变了Redis数据空间的事件 ...
- HZOI 可怜与超市
网上搜不着,八成又是哪个学长留下的…… 因为考试第二题我们都好不容易才搞懂,学长有给我们扔了几道类似的题. 其实这道题思路挺好想的,就是一些细节还有复杂度比较难弄,好难调啊. 看到题的第一眼以为是树形 ...