欢迎来到天天文库
浏览记录
ID:20532115
大小:80.00 KB
页数:8页
时间:2018-10-12
《使用sqlj编写存储过程--》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、使用SQLJ编写存储过程>> 1.编写一个SQLJ存储过程 2.把它装载进一个Oracle数据库 3.在数据库中发布Java方法 4.运行过程 5.和PL/SQL相对应的过程比较结果 PL/SQL存储过程 DeleteClassification过程主要使用两个表工作,ValidTransaction(父表)和Classification(子表),是一种使用TransactionId外键的一到多的关系。存储过程的目的就是删除所有指定的时期/月份的ValidTransaction的Classification纪录。ValidTransac
2、tion表中的TransactionDate字段选择这个日期范围之内的记录。 在例子中,ValidTransaction包含12个时期的数据,共有一百二十万行。在ValidTransaction表中的每一行,Classification表分别有10行与之对应,所以就共有一千二百万行数据。清除一个指定月份的Classification数据意味着从Classification表中删除1百万行数据。 DeleteClassification过程的代码使用了一些Oracle8iPL/SQL中的新的特性,象BULKBINDS和BULKCOLLECT,用来改
3、善事务的执行性能并增加你在事务中可交付的数据数量,从而减少事务的数目并且降低发生ORA-01555错误的可能性。BULKCOLLECT子句能使整个TransactToReset游标一步就被取出到v_TransactionIdPL/SQL表中。然后游标立即被关闭以避免交叉获取错误,这样也同样减少ORA-01555错误的发生。 最后,这个过程计算删除行数的百分比。如果结果超过了限度,主关键字索引可能就会被损坏而且你还可能要重建它。 代码段1 演示了DeleteClassification存储过程的PL/SQL版本。 创建SQLJ存储过程将要编写服务
4、器端SQLJ代码,另外将在一台客户机上执行编译过程。这个途径提供翻译SQLJ代码的最大灵活性--选项设置和错误处理在客户机上比在服务器上更方便。 开发一个SQLJ存储过程由五个步骤组成: 1.使用Java类的静态方法创建一个SQLJ源文件,后面将要把这个源文件通过SQL封装器与PL/SQL环境合并起来。 2.把这个SQLJ源文件编译成一个Java类或者一组Java类。把所有的类合并成一个.jar文件。 3.使用loadjava实用程序把这个.jar文件装载入Oracle数据库服务器。确定装载过程是成功的,为每个Java类都创建一个JavaCl
5、ass类型的模式对象。 4.为存储的Java过程/函数创建一个PL/SQL封装器。 5.通过从SQL*Plus或者PL/SQL上调用存储的Java过程来测试这些过程。 第一步:创建SQLJ源文件 使用import语句启动PipelineReset.sqlj文件。只导入你计划在你的类中使用的Java类和程序包。importjava.sql.SQLException; importjava.sql.Timestamp; importjava.util.ArrayList; importjava.util.Iterator; SQLJ运行时
6、刻程序包可在JServerJava虚拟机(JVM)中找到。还有,你不必编写创建到数据库的连接的代码了,因为JServer本身带有到数据库服务器的隐含的连接。由于你将在客户机上编译源代码,所以必须包括下列三个import语句:importoracle.jdbc.driver.OracleConnection; importsqlj.runtime.ref.DefaultContext; importsqlj.runtime.ExecutionContext; 接下来,需要声明迭代程序类。在迭代程序类声明中定义了SQLJ为你构造的Java类。你必须
7、把SQLJ迭代程序声明和连接上下文说明放在你的SQLJ源文件里的Java类的顶端,紧接着import语句之后。下列三个迭代程序声明提供PL/SQL版的三个游标函数:#sqliteratorStartEndDate (TimestampstartDate,TimestampendDate); #sqliteratorValidTransactions (LongtransactionId); #sqliteratorClassificationCount (long); 使用下面三个参数定义PipelineReset.java类的静态Del
8、eteClassification方法:publicclassPipelineReset{ publics
此文档下载收益归作者所有