打印本文 打印本文 关闭窗口 关闭窗口
使用SQLJ编写存储过程
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1084  更新时间:2007/11/14 13:14:38  文章录入:mintao  责任编辑:mintao

  在《用SQLJ开发数据库》一文中,我描述了SQLJ是什么;比较它和PL/SQL以及JDBC之间的差别;最后又讨论了SQLJ元素。在本文中,我将一步一步的介绍如何使用DeleteClassification存储过程。

  1. 编写一个SQLJ存储过程

  2. 把它装载进一个Oracle数据库

  3. 在数据库中发布Java方法

  4. 运行过程

  5. 和PL/SQL相对应的过程比较结果

  PL/SQL存储过程

  DeleteClassification过程主要使用两个表工作,ValidTransaction (父表)和Classification (子表),是一种使用TransactionId外键的一到多的关系。 存储过程的目的就是删除所有指定的时期/月份的ValidTransaction的Classification纪录。 ValidTransaction表中的TransactionDate字段选择这个日期范围之内的记录。

  在例子中,ValidTransaction包含12个时期的数据,共有一百二十万行。 在ValidTransaction表中的每一行,Classification表分别有10行与之对应,所以就共有一千二百万行数据。清除一个指定月份的Classification数据意味着从Classification表中删除1百万行数据。

  DeleteClassification过程的代码使用了一些Oracle 8i PL/SQL中的新的特性,象BULK BINDS和BULK COLLECT,用来改善事务的执行性能并增加你在事务中可交付的数据数量,从而减少事务的数目并且降低发生ORA - 01555错误的可能性。 BULK COLLECT子句能使整个TransactToReset游标一步就被取出到v_TransactionId PL/SQL表中。 然后游标立即被关闭以避免交叉获取错误,这样也同样减少ORA - 01555错误的发生。

  最后,这个过程计算删除行数的百分比。 如果结果超过了限度,主关键字索引可能就会被损坏而且你还可能要重建它。

  代码段1 演示了DeleteClassification存储过程的PL/SQL版本。

  创建SQLJ存储过程将要编写服务器端SQLJ代码,另外将在一台客户机上执行编译过程。这个途径提供翻译SQLJ代码的最大灵活性--选项设置和错误处理在客户机上比在服务器上更方便。

  开发一个SQLJ存储过程由五个步骤组成:

  1. 使用Java类的静态方法创建一个SQLJ源文件,后面将要把这个源文件通过SQL封装器与PL/SQL环境合并起来。

  2. 把这个SQLJ源文件编译成一个Java类或者一组Java类。把所有的类合并成一个.jar文件。

  3. 使用loadjava实用程序把这个.jar文件装载入Oracle数据库服务器。 确定装载过程是成功的,为每个Java类都创建一个Java Class类型的模式对象。

  4. 为存储的Java过程/函数创建一个PL/SQL封装器。

  5. 通过从SQL * Plus或者PL/SQL上调用存储的Java过程来测试这些过程。

打印本文 打印本文 关闭窗口 关闭窗口