使用 JDeveloper 进行数据库开发

目的

本教程演示如何使用 JDeveloper 进行脱机数据库开发。您将学习构建现有数据库表的模型,脱机创建一个新视图以及将脱机将更改应用到数据库。还将学习如何在数据库中创建和测试 PL/SQL 对象。

所需时间

大约 20 分钟。

主题

本教程包括下列主题:

 概述
 情景
 前提条件
 创建 Model 项目和数据库连接
 构建脱机数据库对象模型
 在数据库中创建和调试 PL/SQL 对象
 总结

查看屏幕截图

 将鼠标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

概述

本教程使用 JDeveloper 的数据库特性来:

 构建现有表的模型
 在脱机数据库模型中进行更改
 脱机创建一个新视图
 将更改应用到数据库中
 用数据库定义刷新脱机定义
 在数据库中创建、测试和调试 PL/SQL 对象

返回主题列表

情景

您被委派了一项数据库更新任务,要求对 Human Resources 模式作一些小更改,创建一个新数据库视图。同时还要求在数据库中创建一些 PL/SQL 对象并对它们进行测试。

返回主题列表

前提条件

开始本教程之前,您应该:

1.

可以访问或已经安装了 Oracle JDeveloper (11g TP4)。

2.

可以访问或已经安装了 Oracle Fusion 模式。

本 OBE 使用 FOD Fusion Order Demo 模式。要下载和安装示例模式,请按照以下位置提供的说明操作:

http://www.oracle.com/technology/products/jdev/samples/fod/index.html

3.

已通过双击 <jdev_home>\jdeveloper.exe 启动了 JDeveloper。

如果您收到一条消息,询问您是否想从一个早期版本进行移植,单击 No

关闭 Tip of the Day 窗口。

4.

现在应显示 JDeveloper IDE。

返回主题列表

创建 Model 项目和数据库连接

在 JDeveloper 中工作时,可以在应用程序中按项目组织您的工作。JDeveloper 提供了一系列预定义的模板,利用它们可以创建应用程序和配置用于开发不同应用程序的项目。
模板提供了 JDeveloper 支持的基本技术。您可以通过选择最适合您需要的模板,然后对该模板进行配置添加您要使用的任何其他技术来创建工作环境。New Gallery 中可供您使用的选项或用于某些上下文菜单中操作的选项取决于您为该应用程序选择的模板。

本主题将指导您创建一个使用通用配置的应用程序和项目,您需要自定义其配置以 使用 JDeveloper 的数据库功能。

1.

在 Application Navigator 中,单击 New Application 链接。

2.

在 Create Application 对话框中,将 Application Name 从 Application1 更改为 DBModeling。注意,Directory Name 自动进行了更改以匹配新的 Application Name。将 Application Package Prefix 设置为 model,然后单击 Manage Templates 按钮。


3.

注意可用的应用程序模板类型及其关联的技术。

4.

No Template [All Technologies] 节点下面,选择 Empty Project。在右窗格中:

  • 取消选中 Prompt for Name
  • 输入 Model.jpr 作为 Project Name,
  • 在 Available Technologies 列表中选择 Database (Offline),单击  将其移至 Selected Technologies 列表中。

单击 OK

5. 如果情形并非如此,Create Application 对话框中的 Application Template 现在设置为 No Template [All Technologies]。单击 OK

6. 这样就创建了 DBModeling 应用程序,它在 Application Navigator 中显示为一个节点。

7.

在 Application Navigator 中,打开 Application Resources 折叠面板。右键单击 Connections 并选择 New Connection --> Database


8.

在 Create Database Connection 中 ,输入以下值:

Connection Name FOD
UserName fod
Password fusion
Deploy Password 选中
Driver thin
Host Name localhost
JDBC Port 1521
SIDService Name ORCL/XE

单击 Test Connection 按钮。

如果数据库可用并且连接的详细信息正确,那么您将在 Status 窗口中看到 Success!,然后单击 OK

如果发生错误,则验证设置,进行所有必要的更改,然后重新测试该连接。如果仍无法连接,则可能是数据库有问题或没有运行。


9.

Application Resources 导航器中出现了一个新的数据库项。展开 Database 节点,显示 FOD 连接。

关闭 DBModeling.jws 选项卡,单击 Save All  保存您的工作。在学习本教程的剩余内容时,应定期保存您的工作。

返回主题列表

脱机构建数据库对象模型

除了使用联机数据库对象(这不在本教程介绍范围之内)以外,JDeveloper 还允许您脱机构建数据库对象模型并将更改反映到数据库中。

下面的主题将指导您创建一个数据库图,并向该图中添加两个来自 FOD 模式的表。
然后对表中的数据做一些小修改,并基于表中的数据创建视图。最后生成一个包含您用于您所做更改的 DDL 的 SQL 脚本。

 创建一个数据库图
 从数据库连接导入表
 在该图上编辑对象
 创建一个新视图
 生成用于更改的 DDL
 刷新脱机定义

返回主题列表

创建一个数据库图

1.

在 Application Navigator 中,右键单击 Model 项目,然后从上下文菜单中选择 New

显示 New Gallery。

2.

在 Categories 列表中,如未展开 General,则先展开它,选择 Diagrams。然后,从 Items 列表中选择 Database Diagram 并单击 OK


3.

在 Create Database Diagram 对话框中,将 Name 更改为 FOD_DB_Diagram,然后单击 OK

这将打开一个新的数据库图。

4.

注意数据库图区右边的 Component Palette。Component Palette 提供可用于该数据库图的元素。如果看不到 Component Palette,则从 View 菜单中选择 Component Palette 来将其打开。

返回主题

返回主题列表

从数据库连接导入表

您现在有了一个空数据库图,可以通过将表从数据库连接拖到该图中将其导入。导入表将创建脱机表定义,在使用 DDL 在数据库中创建新表或修改表之前可以使用这些表定义。

1.

Connections 折叠面板中,依次展开 DatabaseFOD 节点,查看此连接提供的所有数据库对象。

2.

展开 Tables 节点,选择 ORDER_ITEMS,然后按住 [Ctrl] 键并选择 ORDERS

ORDER_ITEMSORDERS 表拖到该图上。


3.

在 Offline Database 对话框中,选择默认的 Offline Database DATABASE1 并单击 OK

JDeveloper 连接到该数据库,根据您选择的表创建脱机表定义。此操作可能会造成短暂的延时。

创建了脱机表和外键后将把它们显示在该图上。

4.

检查图中的脱机表及其外键。您可能滚动才能查看完整的图。

如有必要,单击缩放图标  以获得更好的显示效果。检查图中的脱机表及其外键定义。

返回主题

返回主题列表

在图上编辑对象

使用 JDeveloper 的建模工具,您可以直接在图上编辑脱机表(称作就地编辑),或通过调用 Properties 对话框进行编辑。您可以更改表名、创建新列、编辑现有列以及编辑表约束。

以下步骤指导您使用就地编辑添加一个新列,使用 Edit Offline Table 对话框添加检查约束。

1.

如果表图大小不便于操作,则单击窗口顶端的 Zoom InZoom Out

在图中的第一部分 ORDER_ITEMS 表中,在最后一列后面单击,新建一行。(显示一个蓝色的行)。在蓝色的行内单击,创建默认的列定义。

键入默认的列名称,输入 TOTAL_ITEM:NUMBER(12,0)

[Enter] 或将焦点移出该表时更改生效。

2.

现在,将就地编辑与使用 Edit Table 对话框编辑进行比较。

双击图中的 ORDER_ITEMS 表打开 Edit Table 对话框,或右键单击图中或 Applications Navigator 中的该表 ,从上下文菜单中选择 Properties 打开该对话框。


3.

在 Edit Offline Table 对话框中,选择 Columns 项,然后在 Columns 列表中选择 TOTAL_ITEM。在 Column Properties 部分中,将 Scale 值更改为 2

单击 Primary KeyUnique ConstraintsForeign Keys 项,查看为该表定义的现有属性。


4.

单击 Check Constraints 项。单击 Add 按钮添加一个新约束。将生成的名称更新为 ORDER_ITEMS_CHK_QUANTITY,在 Condition 部分中键入 QUANTITY != 0


5.

选择 Table Properties 项,然后单击 Storage Options 按钮。

6.

在 Storage 对话框的 Extents 部分中,将 Next 值设置为 32,将 Min 设置为 2

单击 OK

7.

选择 Partitioning 项,查看可能的选项。

8.

选择 DDL 项,并查看与您在 Edit Table 对话框中所进行的更改对应的语句。

单击 OK

9.

返回到图,Check 选项出现在 ORDER_ITEMS 表的第二部分中,并且显示了 TOTAL_ITEM 的新标度。

单击 Save All 保存您的更改。

返回主题

返回主题列表

创建新视图

在本主题中,您要创建一个新的数据库视图,其中包括了员工的姓和员工所工作部门的名称。

1.

在 Application Navigator 的 Model | Offline Database Sources | DATABASE1 中,右键单击 FOD 节点并从上下文菜单中选择 New Database Object --> New View

2.

Create View 对话框打开,允许您为要创建的视图输入 SQL Query。

单击 Advanced 复选框。


3.

展开 SQL Query 项,选择 Quick-pick objects


4.

展开 ORDER_ITEMS 并多选

  • LINE_ITEM_ID
  • PRODUCT_ID
  • QUANTITY
  • UNIT_PRICE

然后展开 ORDER_ITEMS_ORDERS_FK --> ORDERS 节点,将 ORDER_DATE 添加到您的当前选择。单击 Add 按钮  移入所选项。


5.

选择 FROM clause 项并单击 Edit 按钮。

6.

Edit Join 对话框显示可用的各种联接可能性。单击 Cancel

7.

选择 DDL 项,查看对应的 SQL 语句。

单击 OK


8.

在 Application Navigator 中选择 VIEW1,然后将其拖放到数据库图中。

单击 Save All 保存您的更改。



9.

检查图中的视图。

10.

从 Orders 表中选择 CUSTOMER_ID,将该列拖放到 VIEW1 的 ORDERS 框中。

11.

CUSTOMER_ID 列复制到视图中。

12.

双击图上的 VIEW1 编辑该视图。选择 SQL Query 项,customer_id 列已添加到 SELECT 列表中。

单击 Cancel

返回主题

返回主题列表

生成用于更改的 DDL

在前几步中,您学习了如何从数据库连接导入表,修改其中的数据,并基于它们创建新视图。
在本主题中,您要创建一个包含用于更改的 DDL 的 SQL 文件,之后您可以使用它来更新数据库。

通过 JDeveloper,您还可以直接更改数据库,或将更改反映到数据库。

1.

右键单击图中的 VIEW1,然后从上下文菜单中选择 Synchronize with Database --> Generate To --> SQL script。这将调用 Generate SQL from Offline Database Objects 向导。

2.

在 Generate SQL 对话框中,选择 CREATE 选项并单击 Next


3.

在 SQL Script Options 页面中,接受 SQL file Name 并单击 Next,然后单击 Finish

4.

在 SQL 脚本窗口中,单击 Run Script 图标创建视图。

5.

在 Select Connection 对话框中,选择 FOD (DBModeling) 作为 Connection Type。单击 OK

6.

Script Output 返回所执行的操作的状态。

7.

单击 FOD_DB_Diagram 选项卡返回图。然后在 ORDER_ITEMS 表中单击右键,从上下文菜单中选择 Synchronize with Database --> Generate To --> SQL script

8.

在 Generate SQL 对话框中,为 FOD 连接选择 ALTERManual Reconcile,然后单击 Next

9.

在 Manual Reconcile 页面中,显示包括 Order_items 表的 Offline 定义和 FOD 定义之间区别的属性。

单击 Only Show Differences 选项。

10.

查看差别,单击 Accept all the changes 按钮。

单击 Next

11.

接受默认的 SQL 文件名,然后单击 Finish

12.

在 SQL 脚本窗口中,单击 Run Script 图标创建视图。

13.

在 Select Connection 对话框中,选择 FOD (DBModeling) 作为 Connection Type。单击 OK

14.

Script Output 返回所执行的操作的状态。

返回主题

返回主题列表

刷新脱机定义

在前面的步骤中,您了解了如何从脱机定义更新数据库定义。
在本主题中,您刷新脱机定义使之与数据库定义匹配。

1.

重新打开图,双击 ORDER_ITEMS 编辑该表。

2.

ORDER_ITEMS 表中单击右键,从上下文菜单中选择 Synchronize with Database --> Refresh from [FOD]

3.

在 Confirm Offline Objects Overwrite 对话框中,单击 Yes 接受更改。

4.

在图中,双击 ORDER_ITEMS 编辑该表。

5.

现在选择 Table Properties 项,然后单击 Storage Options 按钮。

6.

存储值反映来自数据库值的变化。

单击 OK。再次单击 OK 退出 Edit Table 对话框。

返回主题

返回主题列表

在数据库中创建和调试 PL/SQL 对象

通过 JDeveloper,您可以创建、编辑、测试和调试数据库中存储的 PL/SQL,其中包括对象类型、程序包、过程、函数和触发器。执行此操作的一个方法就是在 JDeveloper 中创建一个文件形式的 SQL 脚本,然后对数据库运行该脚本。另一个方法是在数据库中直接创建一个 PL/SQL 对象。

在下面的主题中,您将创建一个对象类型 order_items_rec,它定义定单项记录的布局。然后创建一个含 get_order_items 函数的程序包,该函数返回一个由 order_items_rec 定义的定单项记录。最后创建程序包主体来执行查询并填充 order_items_rec。您使用调试功能来测试程序包。

 授予 FOD 调试权限
 运行 SQL 脚本创建一个对象类型
 直接创建 PL/SQL 程序包
 测试并调试 PL/SQL 函数

返回主题列表

授予 FOD 调试权限

您需要先授予 FOD 相应的权限,然后才能够使用调试功能。

1.

要设置 FOD 的权限,从主菜单中选择 Tools | SQL Worksheet

2.

在 Select Connection 对话框中,单击 OK 接受 FOD(DBModeling) 连接。


3.

在 SQL Worksheet 窗口中,输入 connect system/oracle; (提供允许您执行 DBA 语句的系统名称和口令)。然后输入 grant debug connect session to fod;


4.

单击 Run Script 图标  执行这两条语句。

Script Output 窗口应该不会报告任何错误。

返回主题

返回主题列表

运行 SQL 脚本创建一个对象类型

1.

要创建 SQL 脚本,在 Application Navigator 中右键单击 Model 项目,然后选择 New 打开 New Gallery。

2.

在 Categories 列表中,展开 Database Tier 并选择 Database Files,然后在 Items 列表中选择 SQL File。单击 OK


3.

在 Create SQL File 对话框中,将 File Name 更改为 order_items_rec.sql ,然后单击 OK

新的空文件在代码编辑器中打开。


4.

复制下面的代码并将其粘贴到代码编辑器中:


REM
REM Create object ORDER_ITEMS_REC
REM

CREATE or REPLACE type ORDER_ITEMS_REC as object
(
ORDER_ID NUMBER(15),
LINE_ITEM_ID NUMBER(3),
PRODUCT_ID NUMBER(15),
QUANTITY NUMBER(6),
UNIT_PRICE NUMBER(8,2),
CREATED_BY VARCHAR2(60),
CREATION_DATE DATE,
LAST_UPDATED_BY VARCHAR2(60),
LAST_UPDATE_DATE DATE,
OBJECT_VERSION_ID NUMBER(15),
TOTAL_ITEM NUMBER(12,0)
);
/
show errors;

单击 Run Script 图标。

在 Select Connection 对话框中,单击 OK 接受 FOD (DBModeling) 连接。


5.

Script Output 窗口应该不会报告任何错误。


单击 Save All 保存您的更改。


6.

在 Application Resources 窗格的 Connections 导航器中,展开 Database| FOD | Types 节点,找到新对象类型 ORDER_ITEMS_REC

返回主题

返回主题列表

创建 PL/SQL 程序包

您刚才学习了通过先创建脚本,然后针对数据库运行脚本来创建 PL/SQL 对象。在本主题中,您将在数据库中直接创建 PL/SQL 程序包 ORDER_ITEMS_FETCH。

1.

单击 Databases 选项卡打开 Database 导航器(如果该导航器尚未打开,从主菜单中选择 View | Database Navigator。在 Database Navigator 中,依次展开 DBModeling 节点和 FOD 节点。右键单击 Packages 节点,从上下文菜单中选择 New Package

2.

在 Create PL/SQL Package 对话框中,将 Object Name 设置为 ORDER_ITEMS_FETCH,然后单击 OK

ORDER_ITEMS_FETCH 程序包主体在代码编辑器中打开。

3.

在 ORDER_ITEMS_FETCH 程序包的代码编辑器中,在已有的两行代码间输入以下代码,创建 get_order_items 函数:

FUNCTION get_order_items
(order_id_no IN NUMBER,
line_item_id_no IN NUMBER)

RETURN ORDER_ITEMS_rec;

4.

在 Database Navigator 中,右键单击 Packages 节点并从上下文菜单中选择 Refresh。

程序包将显示在导航器中。

5.

右键单击 ORDER_ITEMS_FETCH 项,然后从上下文菜单中选择 Create Body

6.

该程序包主体模板在代码编辑器中打开。

7.

在 ORDER_ITEMS_FETCH 程序包主体的代码编辑器中输入以下代码,执行查询并填充员工记录:

PACKAGE BODY ORDER_ITEMS_FETCH AS

FUNCTION get_order_items(order_id_no IN NUMBER,
line_item_id_no IN NUMBER)
RETURN ORDER_ITEMS_rec AS
order_items_found order_items%rowtype;
order_items_rtn order_items_rec;

BEGIN
/* TODO implementation required */
SELECT *
INTO order_items_found
FROM order_items
WHERE order_items.order_id=order_id_no
-- and order_items.line_item_id = line_item_id_no;

order_items_rtn := order_items_rec
(order_items_found.order_id,
order_items_found.line_item_id,
order_items_found.product_id,
order_items_found.quantity,
order_items_found.unit_price,
order_items_found.created_by,
order_items_found.creation_date,
order_items_found.last_updated_by,
order_items_found.last_update_date,
order_items_found.object_version_id,
order_items_found.total_item
);
RETURN order_items_rtn;
END get_order_items;
END ORDER_ITEMS_FETCH;

8.

在代码编辑器窗口中,在注释行下面开始输入
和 order_items.line_item_id = line_item_id_no;
这两条语句,体验代码智能识别。
键入 and order_items.,键入时您将看到弹出式窗口帮助您选择适当的语法。

9.

单击 Compile for Debug 图标,编译程序包主题。

返回主题

返回主题列表

测试并调试 PL/SQL 函数

1.

在代码编辑器中,单击 Return 语句左侧空白处设置一个断点。

2.

在 Database Navigator 中,右键单击 ORDER_ITEMS_FETCH 程序包并从上下文菜单中选择 Compile for Debug

3.

在 Database Navigator 中,右键单击 ORDER_ITEMS_FETCH 程序包并从上下文菜单中选择 Debug

4.

在 Debug PL/SQL 对话框中进行以下更改,以显示定单 id 编号 1001 和行项目 id 编号 2:


ORDER_ID_NO := NULL;
代码行更改为
ORDER_ID_NO := 1001;


LINE_ITEM_ID_NO := NULL;
代码行更改为
LINE_ITEM_ID_NO := 2;
取消
--DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return); 的注释,
更改为
DBMS_OUTPUT.PUT_LINE('v_Return = Product_id:' || v_Return.product_id || ' Qty:' || v_Return.quantity ||' Price:'|| v_Return.unit_price);

单击 OK

5.

调试日志窗口显示程序包的执行停止。

在日志窗口中选择 Debug 选项卡旁边的 Data 选项卡,或者通过从主菜单中选择 View | Debugger | Data 来选择该选项卡。

6.

在 Data 窗格中,展开 ORDER_ITEMS_FOUND 节点。然后将显示所检索的行的所有值。

7.

单击 Debugging 选项卡,然后单击 Resume 按钮终止程序包执行。

8.

日志窗口显示 ORDER_ITEMS_FETCH 程序包中 get_order_items() 函数的输出。

9.

在代码编辑器窗口中,单击左侧空白中的红色按钮删除断点,然后单击 Compile 按钮重新编译该程序包。

您已经成功完成了此 OBE。

返回主题

返回主题列表

总结

在本教程中,您使用了 JDeveloper 的某些数据库特性。您在数据库图上脱机构建了数据库表的模型,并创建了一个新的脱机视图。然后,您创建了一个 SQL 脚本,用以将这些更改反映到数据库。您还通过运行 SQL 脚本在数据库中创建了一个对象类型并直接创建了一个 PL/SQL 程序包,并在 JDeveloper 中对它们进行了测试。

您已学会了如何

 在数据库图中创建脱机数据库表的模型
 通过数据库图更新数据库定义
 在数据库图中创建脱机定义
 协调脱机和联机定义
 在数据库中创建并测试 PL/SQL 对象

返回主题列表

 将鼠标置于该图标上可以隐藏所有的屏幕截图。