java source(2)

Oracle sql语句创建java存储过程

使用Oracle sql语句来创建:

e.g. 使用


create or replace and compile java source named "<name>" as 

后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。


SQL> create or replace and compile java source named "javademo1"  
as  
import java.sql.*;  
public class JavaDemo1  
{  
public static void main(String[] argv)  
{  
System.out.println("hello, java demo1");  
}  
}  

Java 已创建。


SQL> show errors java source "javademo1" 

没有错误。


SQL> create or replace procedure javademo1  
as  
language java name 'JavaDemo1.main(java.lang.String[])';  

过程已创建。


SQL> set serveroutput on  
SQL> call javademo1(); 

调用完成。


SQL> call dbms_java.set_output(5000); 

调用完成。


SQL> call javademo1();  
hello, java demo1 

调用完成。


SQL> call javademo1();  
hello, java demo1 


调用完成。
2. 使用外部class文件来装载创建
e.g. 这里既然用到了外部文件,必然要将class文件放到Oracle Server的某一目录下边。

授权成功。


SQL> conn scott/tiger@iihero.Oracledb 


已连接。
 


SQL> create or replace directory test_dir as 'd:\Oracle'; 

目录已创建。


SQL> create or replace java class using bfile(test_dir, 'OracleJavaProc.CLASS')  
2 / 

Java 已创建。


SQL> create or replace procedure testjavaproc as 
language java name 'OracleJavaProc.main(java.lang.String[])';  
2 / 

过程已创建。


SQL> call testjavaproc(); 

调用完成。


SQL> execute testjavaproc; 

PL/Oracle SQL 过程已成功完成。


SQL> set serveroutput on size 5000  
SQL> call dbms_java.set_output(5000); 

调用完成。


SQL> execute testjavaproc;  
It's a Java Oracle procedure. 


3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。
先创建一个类, e.g.


import java.sql.*;  
import Oracle.jdbc.*;  
public class OracleJavaProc ...{  
Add a salgrade to the database.  
public static void addSalGrade
(int grade, int losal, int hisal) ...{  
System.out.println
("Creating new salgrade for EMPLOYEE...");  
try ...{  
Connection conn =  
DriverManager.getConnection("jdbc:default:connection:");  
String sql =  
"INSERT INTO salgrade " +  
"(GRADE,LOSAL,HISAL) " +  
"VALUES(?,?,?)";  
PreparedStatement pstmt = conn.prepareStatement(sql);  
pstmt.setInt(1,grade);  
pstmt.setInt(2,losal);  
pstmt.setInt(3,hisal);  
pstmt.executeUpdate();  
pstmt.close();  
}  
catch(SQLException e) ...{  
System.err.println("ERROR! Adding Salgrade: "   
+ e.getMessage());  
}  
}  
}   

使用loadjava命令将其装载到服务器端并编译:


D:eclipse3.1workspacedbtest>loadjava -u scott/tiger@iihero.Oracledb -v -resolve Or  
acleJavaProc.java  
arguments: '-u' 'scott/tiger@iihero.Oracledb '-v' '-resolve' 'OracleJavaProc.java'  
creating : source OracleJavaProc  
loading : source OracleJavaProc  
resolving: source OracleJavaProc 

查询一下状态:

连接到:


Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production  
With the Partitioning, OLAP and Oracle Data Mining options  
JServer Release 9.2.0.1.0 - Production  
SQL> SELECT object_name, object_type, 
status FROM user_objects WHERE object_type LIKE 'JAVA%';  
OBJECT_NAME  
OBJECT_TYPE STATUS  
OracleJavaProc  
JAVA CLASS VALID  
OracleJavaProc  
JAVA SOURCE VALID  

测试一下存储过程:


SQL> create or replace procedure add_salgrade(id number, losal number, hisal num  
ber) as language java name 'OracleJavaProc.addSalGrade(int, int, int)';  
2 / 

过程已创建。


SQL> set serveroutput on size 2000  
SQL> call dbms_java.set_output(2000); 

调用完成。


SQL> execute add_salgrade(6, 10000, 15000);  
Creating new salgrade for EMPLOYEE... 

PL/SQL 过程已成功完成。


SQL> select * from salgrade where grade=6;  
GRADE LOSAL HISAL  
6 10000 15000  

以上的相关内容就是对如何创建java存储过程,即如何使用Oracle sql语句来创建的内容介绍,望你能有所收获。

posted on 2011-03-30 14:11  Mayvar  阅读(917)  评论(0编辑  收藏  举报

导航