Oracle 数据库开发人员可能涉及以下任务:
-
实现应用程序所需的数据模型
-
创建模式对象
-
实施数据完整性规则
-
为一个新的开发项目选择编程环境
- 编写服务器端 PL/SQL 或 Java 子程序, 和客户端使用的 SQL 语句的程序代码
-
使用所选择的开发工具创建应用程序接口
-
为开发全球化应用程序建立全球化支持环境
- 为开发、 测试、 培训等, 在不同的数据库中实例化应用程序,并在生产环境中部署
另见:
-
《Oracle Database 2 Day Developer's Guide》获取Oracle数据库开发中的介绍和基于GUI的教程
-
《Oracle Database Development Guide》用于深入讨论数据库设计、开发人员的SQL和开发人员的PL/SQL等主题
数据库开发人员的工具
SQL Developer
SQL Developer是数据库开发人员使用SQL*Plus编辑和开发基本任务的一种方便方法。
SQL Developer 是 SQL*Plus 的一个图形化的版本, 是用 Java 写的,支持SQL 和 PL/SQL 开发。您可以使用标准的数据库身份验证连接到任何 Oracle 数据库模式。 SQL Developer 使您能够:
-
浏览、 创建、 编辑、 和删除模式对象
-
运行 SQL 语句
-
编辑和调试 PL/SQL 程序单元
-
操作和导出数据
-
创建和显示报表
SQL Developer 在默认的 Oracle 数据库安装中就可用, 并提供免费下载。
另见:
《Oracle Database 2 Day Developer's Guide》 和《Oracle SQL Developer User's Guide》了解如何使用 SQL Developer
Oracle Application Express
Oracle Application Express 是针对 Oracle 数据库的 Web 应用程序开发工具。Oracle Application Express 使用一些内置的功能, 如用户界面主题、 导航控件、 表单处理程序和灵活的报表, 来加快应用程序的开发。
Oracle Application Express 与数据库安装在一起, 并由一些数据表和PL/SQL 代码组成。当你运行一个应用程序时, 您的浏览器发送的 URL 请求被翻译成一个 Oracle Application Express 的 PL/SQL 调用。 当数据库处理了 PL/SQL 后,结果将以 html 格式返回浏览器。每发一次请求或提交一个页面时,都会像这样反复发生。
图 19-1 Application Express 与嵌入式 PL/SQL 网关
Description of "Figure 19-1 Application Express with Embedded PL/SQL Gateway"
Oracle JDeveloper
Oracle JDeveloper 是一个集成开发环境 (IDE),使用 Java、XML、Web服务、和 SQL 等最新行业标准,生成面向服务的应用程序。
Oracle JDeveloper 支持完整的软件开发生命周期,具备建模、 编码、 调试、 测试、 分析、 优化,和部署应用程序等集成的功能。
Oracle JDeveloper 为各种应用程序开发工具大量使用视窗。例如, 在创建一个Java 应用程序时, 您可以使用如 Java 可视编辑器和组件面板之类的工具。除了这些工具之外, JDeveloper 还提供了一系列的导航器,以帮助您组织和查看您的项目中的内容。
另见:
-
《Oracle Database 2 Day + Java Developer's Guide》了解如何使用 JDeveloper
-
您可以从下面的 URL 下载 JDeveloper:http://www.oracle.com/technetwork/developer-tools/jdev/downloads/
Oracle 开发工具 for Visual Studio.NET
Oracle 开发工具 for Visual Studio .NET 是一组与 Visual Studio.NET 集成在一起的应用程序开发工具。
Oracle Developer Tools for Visual Studio .NET 工具提供图形用户界面来访问 Oracle 功能,使用户能够执行广泛的应用程序开发任务,提高开发效率和易用性。
Oracle 开发工具支持使用 Visual Basic、 C#、 和其他.NET 语言来编写和实现 .NET 存储过程。这些过程是用某种.NET 语言编写的,并且其中包含 SQL 或 PL/SQL 语句。
数据库开发人员的主题
应用程序设计和优化的原则
以下的应用程序设计和优化原则是有用的指导方针:
-
了解 Oracle 数据库的工作原理
作为一名开发人员,您希望在最少的时间内,完成对跑在某个 Oracle 数据库上的应用程序的开发工作,而这需要充分利用数据库的体系结构和功能特性。例如,假如不了解 Oracle 数据库的并发性控制和多版本读取一致性,就可能造成应用程序破坏数据完整性、 运行速度很慢、 和降低可扩展性。了解事务保护和应用程序连续性如何工作,可以避免编写不必要的异常处理代码。 -
除非有充分的理由不使用绑定变量,否则请使用绑定变量
当查询使用了绑定变量时,数据库可以仅对其编译一次,并将其查询计划存储在共享池中。 当再次执行同一语句时,数据库可以执行一次软解析,并重新使用该计划。 相比之下, 硬解析需要花更长时间,并使用更多的资源。使用绑定变量以允许软解析非常有效, 也是 Oracle 数据库的推荐做法。 -
在服务器服务端端(而不是在客户端)实现完整性约束
使用主键和外键使得数据可以在多个应用程序中被重用。 将业务规则编写在客户端,意味着跑在该数据库上的其他客户端并不能访问这些规则。 -
使用有代表性的数据和会话活动,来建立测试环境
一个模拟您的生产环境的测试环境能提供很多好处。例如,你可以对该应用程序做基准测试, 以确保它具有良好的可扩展性和性能。此外,您可以使用测试环境测量数据库变更对性能的影响,并确保升级和补丁程序能正常工作。 -
设计具有良好性能目标的数据模型
通常,尝试使用通用的数据模型会导致较差的性能。设计完善的数据模型能尽可能高效响应最常见的查询。例如, 数据模型应该使用能提供最佳性能的索引类型。 在部署后再来优化是很不可取的, 因为逻辑和物理结构的更改可能会很困难或根本不可能。 -
定义明确的性能目标,并保存历史度量记录
开发的一个重要方面是, 确定应用程序的预期性能和可扩展性要达到什么水准。 例如,您应该使用的度量包括预期的用户负载、 每秒事务量、 可接受的响应时间等。好的实践证明, 您应该维护性能指标的历史记录。 这样,你可以主动地或被动地监视性能 -
在应用程序代码中加入调试、跟踪功能
良好的开发习惯包括将调试代码添加到您的应用程序中。生成跟踪文件的能力对调试和诊断性能问题很有用。
另见:
-
"SQL Parsing"
-
"Introduction to Data Concurrency and Consistency"
-
"Advantages of Integrity Constraints"
-
《Oracle Database 2 Day Developer's Guide》关于设计和部署数据库应用程序时的注意事项
-
《Oracle Database SQL Tuning Guide》学习如何为性能设计应用程序
客户端数据库编程
您可以使用预编译器或Java翻译器在源代码中放置SQL语句,或者使用api使应用程序能够与数据库交互。
另见:
《Oracle Database Development Guide》了解如何选择编程环境
《Server-Side Programming: PL/SQL and Java》回顾
嵌入式 SQL
由于历史原因,客户端/服务器程序使用嵌入式 SQL 与数据库进行交互。
Oracle 预编译器
预编译器提供了以下几个好处:
- 提高生产效率,因为相比等效的 OCI 应用程序, 您通常只需要写更少的代码
-
使您能够创建高度自定义的应用程序
- 允许对资源的使用、 SQL 语句的执行、 和各项运行时指标进行密切监控
- 因为预编译器替你将每个嵌入式 SQL 语句转换为对 Oracle 数据库运行时库的调用, 节省了时间
- 使用对象类型转换器将 Oracle 数据库对象类型和集合映射到将在 Pro*C/C++应用程序中用到的数据类型
- 提供了对象类型和集合的编译时类型检查, 和从数据库类型到 C 数据类型的自动类型转换
ROLLBACK; -- interactive
EXEC SQL ROLLBACK; -- embedded
图 19-2 使用预编译器的程序开发
Description of "Figure 19-2 Program Development with Precompilers"
另见:
《Pro*C/C++ Programmer's Guide》关于 Pro*C/C++预编译器的完整说明
SQLJ
SQLJ 是一个针对在 Java 源代码中嵌入 SQL 语句的 ANSI SQL-1999 标准。 SQLJ 提供了一个对在 Java 客户端使用 Java 数据库连接 (JDBC) API 进行 SQL 数据访问的简单替代方案。
另见:
"SQLJ"
客户端 API
绝大多数的开发人员如今在其数据库应用程序中使用 API 以嵌入 SQL。
OCI 和 OCCI
作为预编译器的替代方法, Oracle 提供了 OCI 和 OCCI API。
- 支持所有通过 Oracle 数据库可用的 SQL DDL、 DML、 查询、 和事务控制设施
-
即时客户端, 它是磁盘空间有限时部署应用程序的一种方法
- 线程管理、 连接池、 全球化功能、以及从 C 应用程序对数据进行直接路径加载
图 19-3 使用 OCI 或 OCCI 时的开发过程
Description of "Figure 19-3 Development Process Using OCI or OCCI"
另见:
-
《Oracle Call Interface Programmer's Guide》
-
《Oracle C++ Call Interface Programmer's Guide》
ODBC 和 JDBC
-
JDBC thin driver
这个纯 Java 驱动程序驻留在没有 Oracle 安装客户端软件的客户端主机上。它是独立于平台的,并能与小应用程序和应用程序一起使用。 -
JDBC OCI driver
此驱动程序驻留在安装了 Oracle 客户端软件的客户端主机上。 它只能用于应用程序。 JDBC OCI 驱动程序是用 C 和 Java 编写的,它将 JDBC 调用转换为 OCI 调用。
// Create a statement
Statement stmt = conn.createStatement();// Query dual table
ResultSet rset = stmt.executeQuery("SELECT 'Hello World' FROM DUAL");
另见:
《Oracle Database Development Guide》 和《Oracle Database 2 Day + Java Developer's Guide》学习 JDBC
全球化支持
全球化支持允许您开发多语言应用程序和软件, 同时可以从世界上的任何位置访问和运行。
开发人员编写全球化的数据库应用程序必须执行以下操作:
- 了解 Oracle 数据库全球化支持体系结构, 包括不同的字符集、 地域、 语言、 和语言的排序定义等属性
- 了解他们的中间层编程环境的全球化功能, 包括如何与数据库的区域设置模式进行交互并保持同步
- 设计和编写代码, 能够同时支持运行在不同操作系统上,具有不同的字符集和语言环境要求的多个客户端
另见:
《Oracle Database Globalization Support Guide》有关全球化的详细信息
全球化支持环境
Oracle 数据库提供全球化支持的功能,例如:
-
本机语言和地区
-
日期、 时间、 数字、 和货币的本机格式
-
日历系统 (公历、 日本日历、 皇历、 泰历等等)
-
包括 Unicode 在内的多种字符集
-
字符语义
字符集
以下区别对应用程序开发很重要:
- 数据库字符集确定了在一个数据库中可以表示哪些语言。 字符集是在创建数据库时指定的。
- 客户端字符集是由某个客户端应用程序输入或显示的数据的字符集。客户端和数据库的字符集可以是不同的。
Oracle 数据库支持如下类别的编码字符集:
-
单字节字符集
每个字符占一个字节。 7 位字符集的一个例子是 US7ASCII。 8 位字符集的一个例子是 WE8DEC。 -
多字节字符集
每个字符占用多个字节。多字节字符集通常用于亚洲语言。
-
Unicode
通用编码字符集, 使你能够通过使用一种单一字符集,来存储任何一种语言的信息。 Unicode 为每个字符提供了一个唯一的编码值,而无论其平台、 程序、 或语言。
另见:
《Oracle Database Globalization Support Guide》了解字符集迁移
特定于区域的设置
- 当客户端应用程序启动时, 它根据其环境设置初始化客户端 NLS环境。所有 NLS 操作都在本地执行,例如, 在 Oracle Developer 应用程序中使用这些设置的显示格式。
- 当客户端与数据库连接并进行通信时,使用由 NLS_LANG 定义的信息格式。
-
数据库会话基于客户端的通信设置, 初始化其 NLS 环境。
如果客户端没有指定设置, 则会话使用初始化参数文件中的设置。 仅当客户端未指定任何 NLS 设置时, 数据库才会使用初始化参数设置。如果客户端指定了某些 NLS 设置, 则其余的 NLS 设置将保持默认值。
下表显示了使用不同 NLS_LANG 设置的两个客户端。用户在每台主机上启动 SQL*Plus 以 hr 登录到同一数据库,并同时运行相同的查询。由于对于浮点数的特定于区域设置的 NLS 设置不同, 每个会话的结果有所不同。
表 19-1 特定于区域设置的 NLS 设置
t | Client Host 1 | Client Host 2 |
---|---|---|
t0 |
|
|
t1 |
|
|
另见:
《Oracle Database 2 Day + Java Developer's Guide》和《Oracle Database Globalization Support Guide》了解 NLS 设置
Oracle 全球化开发工具包
Oracle全球化开发工具包(GDK)包括全面的编程 API。
另见:
《Oracle Database Globalization Support Guide》
非结构化数据
非结构化数据是指没有分解成更小的逻辑结构的数据。
Oracle 数据库中的 XML 的概述
Oracle XML DB 是一组高性能 XML 存储和检索相关的 Oracle 数据库技术。 XML 数据库提供本机 XML 支持的可互操作的方式, 包括 SQL 和 XML 数据模型。
Oracle XML DB 提供了许多功能,包括以下这些:
- 本机 XMLType 数据类型,可以表示数据库中的 XML 文档, 以便能通过 SQL 访问
- 对 XML 标准如 XML 模式、 XPath、 Xquery、 XSLT 、 和 DOM 的支持
- XMLIndex 支持从高度结构化到完全非结构化的所有形式的 XML 数据
如下示例创建了一个 XMLType 类型的 orders 表:
CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO ordersVALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));
前例还创建一个SQL 目录对象,它是数据库中针对主机计算机上某个物理目录的逻辑名称。此目录下包含 XML 文件。该示例将来自 purchaseOrder.xml 文件的
例 19-1 XMLType
CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO ordersVALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));
另见:
-
《Oracle XML DB Developer’s Guide》
-
《Oracle XML Developer's Kit Programmer's Guide》
Oracle 数据库中的 JSON 的概述
Oracle 数据库为 JavaScript 对象表示法(JSON)数据提供了原生支持,包括查询和索引。
JSON是什么?
JavaScript 对象表示法(JSON)是一种独立于语言的、基于文本的数据格式,可以表示对象、数组和标量数据。各种编程语言都可以解析和生成 JSON 数据。
JSON 通常用作数据交换语言。它通常用于序列化结构化数据并通过网络进行交换,特别是在服务器和 web 应用程序之间。JSON 是运行用 html 嵌入 JavaScript 编写的应用程序的 web 浏览器中的主要数据格式。
JavaScript 对象是由零对或多对属性名和关联 JSON 值组成的关联数组。JSON 对象是一个JavaScript 对象文本,它被写成一个用大括号括起来的属性列表,名称-值对用逗号分隔,每对的名称和值用冒号分隔。对象属性有时称为键。对象属性名值对有时称为对象成员。
例 19-2 JSON 对象
这个示例显示一个 JSON 对象,它表示一个购买订单,具有顶级属性名称 PONumber、Reference、Requestor、User、Costcenter、ShippingInstruction、Special Instructions、AllowPartialShipment 和 LineItems。
{
"PONumber" : 1600,"Reference" : "ABULL-20140421","Requestor" : "Alexis Bull","User" : "ABULL","CostCenter" : "A50","ShippingInstructions" : {
"name" : "Alexis Bull","Address": {
"street" : "200 Sporting Green","city" : "South San Francisco","state" : "CA","zipCode" : 99236,"country" : "United States of America"},"Phone" : [ {
"type" : "Office", "number" : "909-555-7307"},{
"type" : "Mobile", "number" : "415-555-1234"} ] },"Special Instructions" : null,"AllowPartialShipment" : false,"LineItems" : [ {
"ItemNumber" : 1,"Part" : {
"Description" : "One Magic Christmas","UnitPrice" : 19.95,"UPCCode" : 13131092899},"Quantity" : 9.0},{
"ItemNumber" : 2,"Part" : {
"Description" : "Lethal Weapon","UnitPrice" : 19.95,"UPCCode" : 85391628927},"Quantity" : 5.0} ] }
在前面的示例中,大多数属性都有字符串值。PONumber、zipCode、ItemNumber 和 Quantity 都有数值。Shipping Instructions 和 Address 有对象作为值。LineItems 有一个数组作为值。
JSON 和 XML
JSON 和 XML都是常用的数据交换语言。与关系数据不同,JSON 数据和 XML 数据都可以在数据库中存储、索引和查询,而不需要任何定义数据的模式。
由于 JSON 数据具有简单的定义和特性,因此它通常比 XML 数据更容易生成、解析和处理。它也更容易为人类学习和使用。下表描述了 JSON 和 XML 之间的进一步差异。
表 19-2 JSON 和 XML 之间的差异
特性 | JSON | XML |
---|---|---|
适用于简单的结构化数据 | 是 | 是,但也支持半结构化数据和复杂结构化数据 |
对于混合内容非常有用 | 否 | 是 |
缺少属性、名称空间、继承和替换 | 是 | 否 |
重视排序 | 否 | 是 |
主要用于文档而不是数据 | 否 | 是 |
包括日期数据类型 | 否 | 是 |
原生数据库支持JSON
JSON 广泛存储在缺乏关系数据库特性的 no SQL 数据库中。相反,Oracle数据库通过事务、索引、声明性查询和视图等特性支持JSON。
可以像访问其他数据库数据一样访问存储在数据库中的 JSON 数据,包括使用 OCI、.NET 和 JDBC。与使用 SQL 数据类型 XMLType 存储的XML 数据不同,JSON 数据使用 VARCHAR2、BLOB 或 CLOB 存储。通过使用 Oracle SQL,可以对 JSON 数据执行以下操作:
-
将 JSON 数据与非 JSON 关系数据连接起来。
-
使用 SQL 函数 json_object 和 json_array 从关系数据生成 JSON 文档。
-
通过使用 SQL 函数 json_table 将 JSON 数据项目化为关系格式。
-
使用 is_json 创建一个检查约束来强制执行列中的 JSON 数据。数据库使用 check 约束来确认该列是 JSON,用于 JSON 特定的操作,比如简化语法。
-
将 JSON 文档操作为 PL/SQL 对象。
-
使用 SQL 函数 json_query 和 json_value 接受 Oracle JSON 路径表达式作为参数,并将其与目标 JSON 数据匹配。
-
索引 JSON 数据。
-
查询存储在外部表中的 JSON 数据。
-
使用 Oracle GoldenGate 复制包含 JSON 数据列的表。
文本 JSON 数据总是使用 Unicode 字符集,无论是 UTF8 还是 UTF16。Oracle 数据库在内部使用 UTF8 解析和查询 JSON 数据。如果输入或输出的数据与 UTF8 的字符集不同,则会自动执行适当的字符集转换。
例 19-3 创建、加载和查询带有JSON列的表
在本例中,使用 JSON 列 po_document 创建表 j_purchaseorder,然后插入一些简单的 JSON 数据。有些数据被省略了(…)。
CREATE TABLE j_purchaseorder(id RAW (16) NOT NULL,date_loaded TIMESTAMP WITH TIME ZONE,po_document CLOBCONSTRAINT ensure_json CHECK (po_document IS JSON));INSERT INTO j_purchaseorderVALUES (SYS_GUID(),SYSTIMESTAMP,'{"PONumber" : 1600,"Reference" : "ABULL-20140421","Requestor" : "Alexis Bull","User" : "ABULL","CostCenter" : "A50","ShippingInstructions" : {...}"Special Instructions" : null,"AllowPartialShipment" : true,"LineItems" : [...]}');
下面的查询提取 JSON 列 po_document 中的对象 PONumber:
SELECT po.po_document.PONumber FROM j_purchaseorder po;
LOB 概述
大对象 (LOB) 数据类型提供高效的、 随机的、 分段访问数据。
内部 LOB
内部 LOB 将数据存储在数据库本身之中,而不是在外部文件中。
-
CLOB(字符 LOB)按数据库字符集存储大量的文本,如文本或 XML文件
-
NCLOB(国家字符集 LOB)存储 Unicode 数据
-
BLOB (二进制 LOB),将大量的二进制信息存储为位流,并不受字符集转换的限制
另见:
-
"User Segment Creation"
-
"Read Consistency and Undo Segments"
外部 LOB
BFILE(二进制文件大对象,或LOB)是一个外部大对象。
安全文件
SecureFiles LOB 存储是两种存储类型之一;另一种类型是 BasicFiles LOB 存储。
另见:
-
"Oracle Data Types"
-
《Oracle Database SecureFiles and Large Objects Developer's Guide》了解有关 LOB数据类型的更多信息
Oracle 文本的概述
Oracle 文本 (文本) 是一种与 Oracle 数据库准确的全文检索技术。Oracle 文本能索引任何文档, 或存储在文件系统、 数据库、或 Web 上的文字内容。您可以基于其文本内容、 元数据、 或属性来搜索这些文档。
Oracle 文本提供了以下优势:
- Oracle 文本可在一个单独的 SQL 语句中结合使用文本搜索与常规数据库搜索。文本索引存储在数据库中, 文本查询是在 Oracle 数据库进程中运行的。优化程序可以为任何查询选择最佳的执行计划, 为涉及文本和结构化条件的特殊查询提供最佳性能。
- 您可以在 Oracle 文本中使用 XML 数据。特别是,您可以组合使用 XMLIndex 与 Oracle 文本索引、 同时利用 XML 和全文本索引的优势。
- Oracle 文本 SQL API 使创建和维护 Oracle 文本索引并运行搜索,变得简单和直观。
图 19-4 目录查询应用程序
Description of "Figure 19-4 Catalog Query Application"
另见:
-
《Oracle Text Application Developer's Guide》和《Oracle Text Reference》
-
《Oracle XML DB Developer’s Guide》了解如何在 XML 数据中执行全文搜索
Oracle空间和图形概述
Oracle 空间和图形 (空间和图形) 包括用于空间数据和分析以及物理、逻辑、网络、社会和语义图应用程序的高级特性。
空间特性提供了一个模式和函数,可以方便地在 Oracle 数据库中存储、检索、更新和查询空间特性集合。空间数据的一个例子是路线图。空间数据表示地图上对象的地球位置(如经度和纬度)。当地图被渲染时,这个空间数据可以在一张二维的纸上投射出物体的位置。地理信息系统(GIS)可以存储、检索和呈现这些与地球相关的空间数据。当 Oracle 数据库存储此空间数据时,可以使用空间和图形操作和检索该数据,并将该数据与其他数据关联。
另见:
《Oracle Spatial and Graph Developer's Guide》