使用SQLJ编写存储过程
来源:互联网 发布:发牌程序java 编辑:程序博客网 时间:2024/06/06 01:42
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
1.编写一个SQLJ存储过程
2.把它装载进一个数据库
3.在数据库中发布方法
4.运行过程
5.和PL/SQL相对应的过程比较结果
DeleteClassification过程主要使用两个表工作,ValidTransaction(父表)和Classification(子表),是一种使用TransactionId外键的一到多的关系。存储过程的目的就是删除所有指定的时期/月份的ValidTransaction的Classification纪录。ValidTransaction表中的TransactionDate字段选择这个日期范围之内的记录。
在例子中,ValidTransaction包含12个时期的数据,共有一百二十万行。在ValidTransaction表中的每一行,Classification表分别有10行与之对应,所以就共有一千二百万行数据。清除一个指定月份的Classification数据意味着从Classification表中删除1百万行数据。
DeleteClassification过程的代码使用了一些Oracle8iPL/SQL中的新的特性,象BULKBINDS和BULKCOLLECT,用来改善事务的执行性能并增加你在事务中可交付的数据数量,从而减少事务的数目并且降低发生ORA-01555错误的可能性。BULKCOLLECT子句能使整个TransactToReset游标一步就被取出到v_TransactionIdPL/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类都创建一个JavaClass类型的模式对象。
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;
importSQLJ.runtime.ref.DefaultContext;
importSQLJ.runtime.ExecutionContext;
(TimestampstartDate,TimestampendDate);
#sqliteratorValidTransactions
(LongtransactionId);
#sqliteratorClassificationCount
(long);
publicstaticvoidDeleteClassification(
StringperiodName,
intcommitBatchSize,
intpercentageDeleted)throwsSQLException{
...
}
}1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
在《用SQLJ开发》一文中,我描述了SQLJ是什么;比较它和PL/SQL以及JDBC之间的差别;最后又讨论了SQLJ元素。在本文中,我将一步一步的介绍如何使用DeleteClassification存储过程。1.编写一个SQLJ存储过程
2.把它装载进一个数据库
3.在数据库中发布方法
4.运行过程
5.和PL/SQL相对应的过程比较结果
DeleteClassification过程主要使用两个表工作,ValidTransaction(父表)和Classification(子表),是一种使用TransactionId外键的一到多的关系。存储过程的目的就是删除所有指定的时期/月份的ValidTransaction的Classification纪录。ValidTransaction表中的TransactionDate字段选择这个日期范围之内的记录。
在例子中,ValidTransaction包含12个时期的数据,共有一百二十万行。在ValidTransaction表中的每一行,Classification表分别有10行与之对应,所以就共有一千二百万行数据。清除一个指定月份的Classification数据意味着从Classification表中删除1百万行数据。
DeleteClassification过程的代码使用了一些Oracle8iPL/SQL中的新的特性,象BULKBINDS和BULKCOLLECT,用来改善事务的执行性能并增加你在事务中可交付的数据数量,从而减少事务的数目并且降低发生ORA-01555错误的可能性。BULKCOLLECT子句能使整个TransactToReset游标一步就被取出到v_TransactionIdPL/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类都创建一个JavaClass类型的模式对象。
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运行时刻程序包可在JServerJava虚拟机(JVM)中找到。还有,你不必编写创建到数据库的连接的代码了,因为JServer本身带有到数据库服务器的隐含的连接。由于你将在客户机上编译源代码,所以必须包括下列三个import语句:
importSQLJ.runtime.ref.DefaultContext;
importSQLJ.runtime.ExecutionContext;
接下来,需要声明迭代程序类。在迭代程序类声明中定义了SQLJ为你构造的Java类。你必须把SQLJ迭代程序声明和连接上下文说明放在你的SQLJ源文件里的Java类的顶端,紧接着import语句之后。下列三个迭代程序声明提供PL/SQL版的三个游标函数:
(TimestampstartDate,TimestampendDate);
#sqliteratorValidTransactions
(LongtransactionId);
#sqliteratorClassificationCount
(long);
使用下面三个参数定义PipelineReset.java类的静态DeleteClassification方法:
publicstaticvoidDeleteClassification(
StringperiodName,
intcommitBatchSize,
intpercentageDeleted)throwsSQLException{
...
}
}1
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 使用SQLJ编写存储过程
- 使用SQLJ编写存储过程
- 【转载】Java JDBC 执行 DDL 和 SQLJ 存储过程
- 技巧:使用 C# 编写扩展存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用Java编写oracle存储过程
- 使用VS.NET2003编写存储过程
- 技巧:使用 C# 编写扩展存储过程
- 使用Java编写oracle存储过程
- 使用Java编写Oracle存储过程
- 使用oracle存储过程编写分页
- 编写CLR存储过程中使用SqlDataRecord
- MySQL存储过程的编写与使用
- 开始编写存储过程
- SQLSERVER和SYBASE
- MSSQLSever7.0存储引擎
- T-SQL命令在查询中的运用
- 用COM自动服务扩展功能
- SQLPlus中的复制和粘贴技巧
- 使用SQLJ编写存储过程
- 用SQLJ开发
- Microsoft查询处理器的内部机制与结构
- Sql语句密码验证漏洞
- 使用2000的电子商务
- 用VB和RDO访问SQLSERVER
- 数据对象结构的动态建立与访问
- 对等网SQLODBC配置
- Microsoft7.0数据仓库框架