没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Oracle 中的 Java 体系结构
目前,使用 来扩展存储程序是一种很流行的方法。在使用 类库
处理数据的过程中, 是必不可少的一环,这是因为 封装了
类库的数据访问,即任何 存储对象访问的数据都必须经过 。
由于本章的所有内容只被最新的数据库版本所支持,因此它独立于本书的其
他章节,以下是本章要介绍的内容:
中的 体系结构
的连接类型
客户端驱动器,即 瘦驱动
调用接口驱动器,即中间层胖驱动
服务器端内部驱动器
,即服务器级的胖驱动
在 中创建 类库
创建内部服务器的 函数
创建内部服务器的 过程
创建内部服务器的 对象
创建、装载、删除、使用 类库时的故障诊断
映射 类型
本章将向您展示一张 中巨大的 组织结构图,在解释了 的
体系结构之后,您还会看到开发和扩展 组件的方法。
使用 扩展的原因:
我们将使用 作为存储 类库和其他 存储程序或匿名块程序之间的
接口。我们还会映射 和 之间的本地数据类型和用户自定义数据类型,以便能
定义有效接口和支持 , 服务器页面。
1 Oracle 中的 Java 体系结构
! 和 "# 版本的数据库为开发服务器端或内部 程序组件提供
了一个健壮的体系结构。 组件采用 $%,面向对象的
结构,这样的结构非常适合 的对象关系模型$%&'
'。组件的体系结构实际上就是一个库栈,它包含:
操作系统的平台依赖性,例如 ()*、)(*、+'',-'.;
依赖 数据库的文件和库管理;
独立于平台的 /+/0+, 虚拟机;
内核类库,兼容不同的平台;
支持的 1122'' ,,应用程序接
口,如 、 和 );
的 存储对象,为 和 程序之间提供接口,就像服务器
端 类库一样。
和 库就和普通的文件系统一样来存储和管理应用程序,它们
屏蔽了不同操作系统的结构差异和系统限制,从而建立起一个独立于平台的存
储、检索和恢复文件的统一处理过程。同时, 虚拟机为创建有大量文档支
持的 程序提供了一个标准环境。另外, 也为其他
存储对象以及 访问 库提供了软件包。
下图 3" 给出了 /+ 虚拟机的体系结构。
/+ 使用两种格式的命名空间:长名称和短名称。长名称和
中类的命名模式是一样的,我们可以用它本来的命名空间来调用存储 程序。
然而,本章中 示例的名称都是短名称,并且程序也没有放进程序包中。当
然,您完全可以将您的 程序放进程序包中。 存储代码的命名空间包
括了程序包的整个层次。如果命名空间的长度超过 4# 个字符, 在数据
字典视图中就使用哈希命名空间。使用 +51/1 包和 )6)1+7 函数可
以获得完整的命名空间,而如果要获取短名称可以使用 +51/1 程序包和
8&9)1+7 函数。
图 3"/+ 体系结构
/+ 具有自动内存管理的功能,这意味着我们不需要手动分配和释放内存
空间。同时,就像 一样, 也是强类型的语言。因此,强类型和垃
圾回收器相结合,对内存进行管理,为 提供了一个简单的、富有弹性的环
境,就像 的运行时引擎一样。
和 都是解释语言,因此它们要求 909,即时编
译。! 中可以对 和 程序进行本地编译,而这实际上是提
前编译了。本地编译将 和 程序的字节代码转换成机器可执行的程
序代码。
因为本地编译消除了即时编译的延时,所以提高了执行速度。但不幸的是,
它却要花些时间将解释过的程序编译为机器代码。权衡之下,如果您并不经常
改变代码,本地编译是一个好的选择。
如下所示,有 4 种方法可将 的 文件嵌入到数据库实例中:
"处理过程分两步:使用 % 编译 源文件,产生 字节码
程序。$使用 '% 工具将文件放入数据库实例。
:一步处理即可,使用 '% 工具编译文件,并将编译后的 类
文件放入数据库实例。
4一步处理过程,像处理存储 类一样使用 ;'
0 ,数据定义语言创建和编译 源文件。
!&" 中的语法分析程序有时会出现问题,并且在 !&"
中使用 命令创建 程序可能会失败。在 !&: 以及以后的版本中这些
问题都得到了解决。本章所有的示例都将编译并通过使用 '% 工具载入
数据库实例中。
小提示:
如果选择使用上面的第二种方法,那么在我们试图重写文件时,可能会产生 &1
:!344 错误,这是因为在一些数据库版本中并不支持 '% 工具的替换2选项。
要解决这个问题,您只需要使用 '2% 工具并附带–0 选项删除
<;5=> 文件,然后重新运行 '% 工具载入文件即可。
本章假设您对 有一个基本的了解,即能够编译和运行 程序。本
章所有的示例都提供了实例命令行说明。在附录 中有关于这方面的内容的一
个基本指南,并且提供了 环境配置说明。
的存储程序体和传统的 程序体很像,由单个会话使用定义者
权限或调用者权限访问模式调用它们。但 在 数据库实例的内部和
外部的工作方式有一些不同之处,这些不同之处如下所示:
首先是执行的控制有明显的不同, 实例外部的 应用程序包含 方
法,并通过调用它来运行程序,而在实例内部的 程序则没有包含 方法。在
实例中存储的 程序有两种类型的行为,它们是:
第 " 种 程序的功能相当于具有函数和过程的包,它是一些不可
实例化的类。这就要求程序中的所有变量和方法必须是静态的,即将它们作
为类的方法。作为具有函数和过程的 包的镜像,这限制了它们的范
围。为了更易于访问外部 程序,这种程序代码的语法有所改变。
第 : 种 程序的功能相当于对象类型体的实现,它们是一些可以
实例化的类,并且程序中的变量和方法可以是静态的,也可以是非静态的。
但与外部 类不同的是,它们的构造函数不能被重载,即它们只有一个
默认的构造函数。:1 中的 接口用于实例化这种类型的程
序,并且实例化还包含了在 和 间映射数据类型。
类以 字节码的形式保存在一个空文本中,并压缩为 数据库实例
的外部 档案文件。 把它们作为源、类以及 对象资源来管理。模式中包含
一 个 1/1?9) 表 , 它 可 被 +51/1 包 、 795+7&59) 和
&7795+7&59) 过程或 6795+7&59) 函数访问和配置。
内部 类文件并不支持用户接口,这意味着它们不能被直接输出到控制台或本
地声音设备。声音文件可以在 内部处理,但它们不能访问本地声音设备。与
! 相比,"# 稍微有些改变,因为它使用的是 @">A>B,支持
8无头1-9。
内部的 类的名称有两种格式。一种是支持标准模式数据库对象的短格
式,它最长可以有 4# 个字符。当一个类的名称超过长度限制时, 将自动创建一个
哈希名称作为类的短名称,并将长名称存放在别处。
内部 类不支持标准 的 >,')方法。但 ! 和
"# 支持使用多个分解器来定位类。若使用其中一个来定位类,结果却是运行另一
个分解器,我们就会得到意料之外的结果。
操作资源是受严格限制的,您必须拥有 C1 用户权限才能变更它们。可以使用
+51/1 包和 6&1)957&+) 过程像 文件来一样打开操作资源。
线程针对 内部的 类工作方式与外部类有所不同。/+ 使
用的是非抢占的线程模式。这意味着所有的线程运行在一个单一的操作系统线程中
/+ 仅是在线程之间切换上下文。切换上下文的意思是,/+ 以循环的方
式在每一个时间段产生一个线程,直至所有线程结束。
注意:
正在使用 版本会告诉您应该使用哪个版本的 @',.
'2@, 软件开发包。为简单起见,本章所有的示例都是使用
! 支持的 @">4 开发的。同时,它们也被 @">A 所支持。
剩余39页未读,继续阅读
海love翠
- 粉丝: 1
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MMDF1N05ER2G-VB一款SOP8封装2个N-Channel场效应MOS管
- zipkin-server-3.3.0-exec.jar
- MI9933-VB一款SOP8封装2个P-Channel场效应MOS管
- zipkin-server-2.24.4-exec.jar
- MI4953-VB一款SOP8封装2个P-Channel场效应MOS管
- 基于Akka模拟实现Spark Standalone.pdf
- MI4946-VB一款SOP8封装2个N-Channel场效应MOS管
- 毕业答辩模板(动态模板)苹果IOS星空通用论文答辩模板
- 有效cookie值获取方式汇总
- 基于python实现的英雄联盟知识图谱问答系统源码(期末大作业).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页