Java 存储过程

日期:2003 5 月 22 日

在 Java 存储过程中的服务器端跟踪

简介

存储过程是发布到 SQL 并存储在 Oracle 数据库中用于一般用途的 Java 方法。当从一个客户程序调用存储过程时,存储过程可以接受参数、引用 Java 类,以及返回 Java 结果值。Java 类在执行过程中产生的任何输出都不会在用户屏幕上显示。这是因为数据库服务器的默认输出设备不是用户屏幕而是跟踪文件,因此 System.out 和 System.err 会打印到当前的跟踪文件中。
这个方法文档举例说明了在一个 PL/SQL 块中执行 Java 存储过程时,到哪里寻找跟踪文件以及如何把输出重定向到用户屏幕。

运行示例的前提条件

您需要以下条件才能运行此示例 -

  • Oracle9i Database,可以在此下载。

说明

在大部分 java 程序中我们经常使用 print 语句来用于调试。这些语句把消息打印输出到控制台等标准的输出设备。在服务器中,默认的输出设备不是用户屏幕而是一个跟踪文件。因此,Java 存储过程中使用的所有 System.out 和 System.err 语句会把消息打印输出到当前的跟踪文件。


rset = stmt.executeQuery("SELECT ENAME FROM EMP");
System.out.println("Employee names in the EMP table ...");
while ( rset.next() ) {
System.out.println(rset.getString("ENAME"));
}


您可以在最近的跟踪文件 <TRACEFILE_NAME>.trc 中找到输出语句,该文件位于 <ORACLE_HOME>/admin//udump

其中,
<ORA_HOME> :安装 oracle 数据库的文件夹
:连接到数据库时使用的 SID
<TRACEFILE_NAME>:数据库最后用来记录的跟踪文件

现在,如果您想把输出重定向到 SQL*Plus 文本缓冲区,可以调用 DBMS_JAVA 包中的 set_output() 过程,如下所示:


SQL> SET SERVEROUTPUT ON

SQL> CALL dbms_java.set_output(2000);

最小的(也是默认的)缓冲区大小是 2,000 字节;最大的缓冲区大小是 1 百万字节。
当存储过程退出时会打印输出。

运行示例

您可以在线观看此示例的完整源代码。这一节讨论运行示例程序的相关指导

第 1 步 把 Tracing.java 复制到您的工作目录。在您的编辑器中打开此文件,getEmployee() 方法中把下面几行更改为您的数据库连接参数,
Connection conn =
DriverManager.getConnection("jdbc:oracle:thin:@<hostname>:<port>:<SID>", "scott","tiger");

第 2 步 设置 CLASSPATH 环境变量,使其包含 Oracle9i JDBC 驱动程序文件:classes12.zip 或 classes12.jar 或 ojdbc14.jar另外,还要确保 PATH 系统参数包含 JDK 的 bin 目录。

第 3 步 把 Java 类加载到数据库
在命令提示符运行 loadjava 命令

loadjava -u scott/tiger@<DBHOST>:<PORT>:<SID> -verbose -resolve -thin <FILE_NAME>.java 其中,
<DBHOST> :运行数据库的机器的名称
<PORT> :数据库端口
<SID> :连接到数据库时使用的 SID
<FILE_NAME> :java 存储过程源文件。

示例:
D:\Tracing\> loadjava -u scott/tiger@localhost:1521:ORCL -v -r -t Tracing.java

第 4 步 发布 Java 类

CREATE OR REPLACE PROCEDURE getEmployees
AS LANGUAGE JAVA
NAME ’Tracing.getEmployees()’;

第 5 步

从 SQL Plus 调用存储过程

BEGIN
getEmployees;
END;


在控制台或跟踪文件中检查输出。它可能如下所示:

Employee names in the EMP table ...

ALLEN


WARD


RAM


MARTIN

资源


寄送此页面
Printer View 打印机视图