在《用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过程来测试这些过程。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器