使用SQLJ编写存储过程
2007-11-11 04:42:26 来源:WEB开发网核心提示:在《用SQLJ开发数据库》一文中,我描述了SQLJ是什么;比较它和PL/SQL以及JDBC之间的差别;最后又讨论了SQLJ元素,使用SQLJ编写存储过程,在本文中,我将一步一步的介绍如何使用DeleteClassification存储过程,为每个Java类都创建一个Java Class类型的模式对象, 4. 为存储的J
在《用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过程来测试这些过程。