Oracle开发人员 JAVA数据库存储过程
时间:2007-12-23 来源:不详 作者:迈克DB
loadjava -user scott/tiger Hello.class 从Oracle9i版本2开始,loadjava答应通过为包含在被处理的类中的方法创建相应的Call Specs来自动将Java类发布为存储过程。Oracle为开发、测试、调试和布置Java存储过程提供了Oracle9i JDeveloper。 The Resolver Spec 基于JDK的JVM在列于CLASSPATH中的目录中查找类引用,并对其进行解析。因为Oracle数据库类存在于数据库模式中,所以OracleJVM利用数据库解析器(resolver)通过列于Resolver Spec中的模式查找并解析类引用。与CLASSPATH不同(CLASSPATH可以应用于所有的类),Resover Spec根据每类的情况进行应用。缺省解析器首先在加载类的模式中搜寻类,然后在公共同义词(public synonyms)中搜索。
loadjava -resolve <myclass>
你可能需要指定不同的解析器,也可以在使用loadjava时强制进行解析,从而在布置时确定可能在以后运行时发生的任何问题。
loadjava -resolve -resolver "((* SCOTT) (foo/bar/* OTHERS) (* PUBLIC))"
Call Spec和存储过程调用 为了从SQL中调用Java方法(以及从PL/SQl和JDBC中调用),必须首先通过Call Spec发布公共静态方法,它为SQL定义方法采用的参数以及返回的SQL类型。 在我们的例子中,我们将利用SQL*Plus连接到数据库,并为Hello.world()定义一个顶级Call Spec: copyright dedecms
SQL> connect scott/tiger SQL> create or replace function helloworld return VARCHAR2 as language java name 'Hello.world () return java.lang.String'; / Function created.
可以像下面这样调用Java存储过程:
SQL> variable myString varchar2[20]; SQL> call helloworld() into :myString; Call completed. SQL> print myString; MYSTRING --------------------- Hello world
Java存储过程可以通过其Call Spec从以下各项中进行调用:SQL DML语句(INSERT, UPDATE、DELETE、SELECT、CALL、EXPLAIN PLAN、LOCK TABLE和MERGE)、PL/SQL块、子程序、程序包以及数据库触发器。Call Spec的美妙之处在于存储过程实现可以从PL/SQL转换为Java,反之亦可,这一点对于请求者是透明的。 Call Spec从实现语言中(PL/SQL或Java)中抽象出调用界面,因而使之能够在原有应用程序和新的基于Java/J2EE的应用程序之间共享商务逻辑。但是,在从Java客户程序调用在数据库驻留的Java类时,你可能不希望通过PL/SQL包装器(wrapper)。在以后的版本中,Oracle计划提供一种机制,它可以使开发人员略过Call Spec。 高级数据访问控制 Java存储过程可用于控制和限制对Oracle数据的访问,其方法是只答应用户通过存储过程治理数据,而存储过程在其调用者的权限内执行,而不能对表本身进行访问。例如,你可以在特定时间内禁止更新数据,或者使治理者只具有查询工资数据的权利,而不能进行更新,或者记录所有的访问并通知某一安全机构。 原有应用程序与J2EE应用程序之间的数据逻辑共享 因为原有应用程序与J2EE应用程序都通过Call Spec调用存储过程,所以J2EE和非J2EE应用程序可以共享相同的数据逻辑。由于有了Call Spec,所以不用考虑所用的是何种实现语言(无论是PL/SQL还是Java),该数据逻辑都可以共享。 为BMP实体Bean自动生成主要害字 在对EJB实体bean应用BMP时,一个bean实例可以由自动生成的与新插入的数据相关联的主要害字惟一确定,它是ejbCreate()的返回值。可以利用一个插入相应数据的存储过程在一个数据库操作中检索ejbCeater()中的该值,并检索或计算主要害字。作为另一种方法,也可以利用JDBC3.0的RETURN_GENERATED_KEYS特性,以一个SQL语句插入该数据并检索相应的要害字(或ROWID)。但是,存储过程方法在各个JDBC驱动器版本和数据库之间更具可移植性。 可以用以下三个步骤实现这一模式:
文章评论
共有位Admini5网友发表了评论 查看完整内容