Oracle中使用java存储过程-Oracle

Oracle 21NN 4个月前 (06-27) 61次浏览 已收录 0个评论 扫描二维码

Oracle中使用java存储过程。

一、如何创建java存储过程?
通常有三种方法来创建java存储过程。

1. 使用oracle的sql语句来创建:

e.g. 使用create or replace and compile Java source named “ ” as
后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。

Oracle中使用java存储过程-OracleSQL> create or replace and compile java source named “javademo1”


Oracle中使用java存储过程-Oracle
2 as


Oracle中使用java存储过程-Oracle
3 import java.sql.*;


Oracle中使用java存储过程-Oracle
4 public class JavaDemo1


Oracle中使用java存储过程-Oracle
5 {


Oracle中使用java存储过程-Oracle
6 public static void main(String[] argv)


Oracle中使用java存储过程-Oracle
7 {


Oracle中使用java存储过程-Oracle
8 System.out.println(“hello, java demo1”);


Oracle中使用java存储过程-Oracle
9 }


Oracle中使用java存储过程-Oracle
10 }


Oracle中使用java存储过程-Oracle
11 /


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleJava 已创建。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> show errors java source “javademo1”


Oracle中使用java存储过程-Oracle没有错误。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> create or replace procedure javademo1


Oracle中使用java存储过程-Oracle
2 as


Oracle中使用java存储过程-Oracle
3 language java name ’JavaDemo1.main(java.lang.String[])’;


Oracle中使用java存储过程-Oracle
4 /


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle过程已创建。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> set serveroutput on


Oracle中使用java存储过程-OracleSQL> call javademo1();


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle调用完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> call dbms_java.set_output(
5000);


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle调用完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> call javademo1();


Oracle中使用java存储过程-Oraclehello, java demo1


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle调用完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> call javademo1();


Oracle中使用java存储过程-Oraclehello, java demo1


Oracle中使用java存储过程-Oracle调用完成。

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

Oracle中使用java存储过程-Oraclepublic class OracleJavaProc


Oracle中使用java存储过程-Oracle{


Oracle中使用java存储过程-Oracle public static void main(String[] argv)


Oracle中使用java存储过程-Oracle {


Oracle中使用java存储过程-Oracle System.out.println(“It’s a Java Oracle procedure.”);


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle}


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> grant create any directory to scott;


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle授权成功。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> conn scott/tiger@iihero.oracledb


Oracle中使用java存储过程-Oracle已连接。


Oracle中使用java存储过程-OracleSQL> create or replace directory test_dir as ’d:/oracle’;


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle目录已创建。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> create or replace java class using bfile(test_dir, ’OracleJavaProc.CLASS’)


Oracle中使用java存储过程-Oracle 2 /


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleJava 已创建。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> create or replace procedure testjavaproc as language java name ’OracleJavaProc.main(java.lang.String[])’;


Oracle中使用java存储过程-Oracle 2 /


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle过程已创建。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> call testjavaproc();


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle调用完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> execute testjavaproc;


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OraclePL/SQL 过程已成功完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> set serveroutput on size 5000


Oracle中使用java存储过程-OracleSQL> call dbms_java.set_output(5000);


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle调用完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> execute testjavaproc;


Oracle中使用java存储过程-OracleIt’s a Java Oracle procedure.

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

Oracle中使用java存储过程-Oracleimport java.sql.*;


Oracle中使用java存储过程-Oracleimport oracle.jdbc.*;


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oraclepublic class OracleJavaProc …{


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle //Add a salgrade to the database.


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle public static void addSalGrade(int grade, int losal, int hisal) …{


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle System.out.println(”Creating new salgrade for EMPLOYEE…”);


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle try …{


Oracle中使用java存储过程-Oracle Connection conn =


Oracle中使用java存储过程-Oracle DriverManager.getConnection(”jdbc:default:connection:”);


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle String sql =


Oracle中使用java存储过程-Oracle ”INSERT INTO salgrade ” +


Oracle中使用java存储过程-Oracle ”(GRADE,LOSAL,HISAL) ” +


Oracle中使用java存储过程-Oracle ”VALUES(?,?,?)”;


Oracle中使用java存储过程-Oracle PreparedStatement pstmt = conn.prepareStatement(sql);


Oracle中使用java存储过程-Oracle pstmt.setInt(1,grade);


Oracle中使用java存储过程-Oracle pstmt.setInt(2,losal);


Oracle中使用java存储过程-Oracle pstmt.setInt(3,hisal);


Oracle中使用java存储过程-Oracle pstmt.executeUpdate();


Oracle中使用java存储过程-Oracle pstmt.close();


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle catch(SQLException e) …{


Oracle中使用java存储过程-Oracle System.err.println(”ERROR! Adding Salgrade: ”


Oracle中使用java存储过程-Oracle + e.getMessage());


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle}

使用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

查询一下状态:

Oracle中使用java存储过程-Oracle连接到:


Oracle中使用java存储过程-OracleOracle9i Enterprise Edition Release
9.2.
0.1.
0 – Production


Oracle中使用java存储过程-OracleWith the Partitioning, OLAP and Oracle Data Mining options


Oracle中使用java存储过程-OracleJServer Release
9.2.
0.1.
0 – Production


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE ’JAVA%’;


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleOBJECT_NAME


Oracle中使用java存储过程-Oracle–——————————————————————————


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleOBJECT_TYPE STATUS


Oracle中使用java存储过程-Oracle–———————————- ————–


Oracle中使用java存储过程-OracleOracleJavaProc


Oracle中使用java存储过程-OracleJAVA CLASS VALID


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleOracleJavaProc


Oracle中使用java存储过程-OracleJAVA SOURCE VALID

测试一下存储过程:

Oracle中使用java存储过程-OracleSQL> create or replace procedure add_salgrade(id
number, losal
number, hisal num


Oracle中使用java存储过程-Oracleber) as language java name ’OracleJavaProc.addSalGrade(int, int, int)’;


Oracle中使用java存储过程-Oracle
2 /


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle过程已创建。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> set serveroutput on size
2000


Oracle中使用java存储过程-OracleSQL> call dbms_java.set_output(
2000);


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle调用完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> execute add_salgrade(
6,
10000,
15000);


Oracle中使用java存储过程-OracleCreating new salgrade for EMPLOYEE…


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OraclePL/SQL 过程已成功完成。


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-OracleSQL> select * from salgrade where grade=
6;


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle GRADE LOSAL HISAL


Oracle中使用java存储过程-Oracle–——– ———- ———-


Oracle中使用java存储过程-Oracle
6
10000
15000

 

二、如何更新你已经编写的java存储过程?

假如要往类OracleJavaProc里添加一个存储过程方法,如何开发?
正确的步骤应该是先dropjava, 改程序,再loadjava。

e.g.修改OracleJavaProc类内容如下:

Oracle中使用java存储过程-Oracleimport java.sql.*;


Oracle中使用java存储过程-Oracleimport oracle.jdbc.*;


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oraclepublic class OracleJavaProc …{


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle // Add a salgrade to the database.


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle public static void addSalGrade(int grade, int losal, int hisal) …{


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle System.out.println(”Creating new salgrade for EMPLOYEE…”);


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle try …{


Oracle中使用java存储过程-Oracle Connection conn =


Oracle中使用java存储过程-Oracle DriverManager.getConnection(”jdbc:default:connection:”);


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle String sql =


Oracle中使用java存储过程-Oracle ”INSERT INTO salgrade ” +


Oracle中使用java存储过程-Oracle ”(GRADE,LOSAL,HISAL) ” +


Oracle中使用java存储过程-Oracle ”VALUES(?,?,?)”;


Oracle中使用java存储过程-Oracle PreparedStatement pstmt = conn.prepareStatement(sql);


Oracle中使用java存储过程-Oracle pstmt.setInt(1,grade);


Oracle中使用java存储过程-Oracle pstmt.setInt(2,losal);


Oracle中使用java存储过程-Oracle pstmt.setInt(3,hisal);


Oracle中使用java存储过程-Oracle pstmt.executeUpdate();


Oracle中使用java存储过程-Oracle pstmt.close();


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle catch(SQLException e) …{


Oracle中使用java存储过程-Oracle System.err.println(”ERROR! Adding Salgrade: ”


Oracle中使用java存储过程-Oracle + e.getMessage());


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle public static int getHiSal(int grade)


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle …{


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle try …{


Oracle中使用java存储过程-Oracle Connection conn =


Oracle中使用java存储过程-Oracle DriverManager.getConnection(”jdbc:default:connection:”);


Oracle中使用java存储过程-Oracle String sql = ”SELECT hisal FROM salgrade WHERE grade = ?”;


Oracle中使用java存储过程-Oracle PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);


Oracle中使用java存储过程-Oracle ResultSet rset = pstmt.executeQuery();


Oracle中使用java存储过程-Oracle int res = 0;


Oracle中使用java存储过程-Oracle if (rset.next())


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle …{


Oracle中使用java存储过程-Oracle res = rset.getInt(1);


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle rset.close();


Oracle中使用java存储过程-Oracle return res; }


Oracle中使用java存储过程-Oracle catch (SQLException e)


Oracle中使用java存储过程-Oracle
Oracle中使用java存储过程-Oracle …{


Oracle中使用java存储过程-Oracle System.err.println(”ERROR! Querying Salgrade: ”


Oracle中使用java存储过程-Oracle + e.getMessage());

return -1;


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle }


Oracle中使用java存储过程-Oracle


Oracle中使用java存储过程-Oracle}

如何更新呢?

D:eclipse3.1workspacedbtest>dropjava -u scott -v OracleJavaProc

D:/tiger@iihero.oracledbeclipse3.1workspacedbtest>loadjava -u scott -v -resolve Or

acleJavaProc/tiger@iihero.oracledb.java

arguments: ’-u’ ‘scott/tiger@
iihero.oracledb‘ ’-v’ ’-resolve’ ‘OracleJavaProc.java’

creating : source OracleJavaProc

loading : source OracleJavaProc

resolving: source OracleJavaProc

后边的应用示例:

SQL> create or replace function query_hisal(grade
number) return
number as langu

age java name ’OracleJavaProc.getHiSal(int) return int’;


2 /

函数已创建。

SQL> set serveroutput on size
2000

SQL> call dbms_java.set_output(
2000);

调用完成。

SQL> select query_hisal(
5) from dual;

QUERY_HISAL(
5)

–————


9999

 


本文:Oracle中使用java存储过程-Oracle 本文链接:https://www.21nn.cn/shujuku/oracle/49271.html 本站所以图片、文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如有侵权请邮件与我们联系处理。i@ki4.cn
喜欢 (0)
[1353713598@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址