oracle 29532,Oracle探究

HLS HLS/MD120

rt_pstmt.close(); res.close();

local_stmt.close();

remote_conn.close();

localconn.close();

} catch (Exception e) {

System.err.println(e.getMessage());

e.printStackTrace();

}

}

public static void main(String[] args) {

try {

cuxemptransfer.emp_transfer('jdbc:sqlserver://127.0.0.1:1433;user=sa;password=1234',

82332231_1

'com.microsoft.sqlserver.jdbc.SQLServerDriver'); } catch (Exception e) {

e.printStackTrace();

}

}

}

2.3 发布程序

发布程序主要两种方式:

A. Loadjava方式:将JAVA程序打包成JAR,Loadjava将程序装载入ORACLE DB;

B. Jdeveloper工具发布:使用Jdeveloper发布选项直接发布入数据库;

1.LOADJAVA方式:将程序打包成JAR

(1)使用NEW.. 创建Deployment Profiles

Company Confidential – For BDLL & HAND use only 19

(2)打包成JAR:

82332231_2

CUXEMPJPC.jar (3)使用LOADJAVA命令将打包的CUXEMPJPC.jar装载入ORACLE数据库中.

82332231_3

82332231_4

2 .Jdeveoper方式发布 (1).右键Project: CUXEMPJPC-->NEW..选择Loadjava and Java Stored Procedures; (2).附加外部JAR:将程序引用到的SQL SERVER JDBC文件附加,一并导入ORACLE DB; 20

Company Confidential – For BDLL & HAND use only

82332231_5

(2).右键Resource下的deploy文件,发布到对应的数据库

82332231_6

;

82332231_7

第22 / 26页

3.确认是否发布成功 确认是否成功装载到DB,可以用以下语句查询;

82332231_8

4.创建JAVA PROCEDURE 现在数据库中已经装载入JAVA程序,要使用它的话,通过PL/SQL定义成JAVA PROCEDURE; CREATE OR REPLACE PACKAGE BODY cux_hls_javaprocedure_pkg IS --定义JAVA PROCEDURE PROCEDURE ms_emp_transfer(p_db_url IN VARCHAR2, p_db_driver IN VARCHAR2) AS LANGUAGE JAVA NAME 'cux.hr.link.cuxemptransfer.emp_transfer(java.lang.String,java.lang.String)'; --获取数据库中客户化表中记录DB信息 PROCEDURE get_db_info(p_db_key IN VARCHAR2, x_db_driver OUT VARCHAR2, x_db_url OUT VARCHAR2) IS CURSOR csr_db_info IS SELECT t.jdbc_driver, t.db_url, t.user_name, t.pwd FROM cux.cux_pub_db_info t WHERE t.db_key = p_db_key; l_db_driver VARCHAR2(500); l_db_url VARCHAR2(1000); l_db_user VARCHAR2(50); l_db_pwd VARCHAR2(50); BEGIN OPEN csr_db_info; FETCH csr_db_info INTO l_db_driver, l_db_url, l_db_user, l_db_pwd; CLOSE csr_db_info; --SQL SERVER数据库连接符格式为jdbc:sqlserver://localhost;user=MyUserName;password=***** x_db_url := l_db_url || ';user=' || l_db_user || ';password=' || l_db_pwd; x_db_driver := l_db_driver; END get_db_info; --根据数据库信息传入,调用JAVA PROCEDURE PROCEDURE emp_transfer(p_db_key IN VARCHAR2) IS l_db_driver VARCHAR2(500); l_db_url VARCHAR2(1000); BEGIN get_db_info(p_db_key, l_db_driver, l_db_url);

5.测试与结果 本JAVA程序的目的是要将 ORACLE DB中表的数据传递到SQL SERVER中;

82332231_9

6.测试时可能出现的问题 (1).执行时报s:方法****在类XXX中不存在,此类错一般是由于PL/SQL

82332231_10

PROCEDURE定义与所要调用的JAVA CLASS定义不一致导致的;如:

82332231_11

当执行bpm_transfer过程时,将会抛出异常ORA-29531,这是由于NUMBER类型的映射错误造成的,正确的应如下:

82332231_12

82332231_13

注意:对于JAVA中与PL/SQL类型映射

82332231_14

(2) 执行时报ORA-29532: Java 调用被未捕获的Java 异常错误终止;若JAVA程序在Jdev中测试通过,则很有可能是权限不足引起,一般会出现非APPS用户中;

82332231_15

已解决及未解决的问题

未解决的问题

82332231_16

已解决的问题

82332231_17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值