Non supported character set: oracle-character-set-852

 

今天在写一个存储过程, 遇到了一个

java.sql.SQLException: Non supported character set: oracle-character-set-852 异常:

 

网友说: 将 nls_charset12.jar 加入到 classpath 中。

 

本人加入了, 无果。

===========================

 

另外说一下: oracle 版本 11g

 

驱动 ojdbc14.jar   ||   jdk 1.6

 

============================

 

=============================

 

存储过程是这么定义的:

 

create or replace type emptype as object
(
  eno  number(4),
  ename varchar2(20)
);

 

 

CREATE OR REPLACE PROCEDURE "PRO_ADD_EMP2" (emp in EMPTYPE, ref_cur out sys_refcursor)
is
begin
   open ref_cur for
         select emp.eno || ' + 111',emp.ename || ' world !!!' from dual;
end pro_add_emp2;

 

 

然后再客户端是这样子调用的:

 

=================================

 

CallableStatement cstmt = (OracleCallableStatement) conn.prepareCall("{call PRO_ADD_EMP2(?,?) }");
  // 参入参数
  Object[] obj = new Object[]{123,"hello"};
  StructDescriptor ad = StructDescriptor.createDescriptor("EMPTYPE", conn);
  STRUCT arr = new STRUCT(ad,conn,obj);

  cstmt.setObject(1, arr);
  
  cstmt.registerOutParameter(2, OracleTypes.CURSOR);
  
        cstmt.execute();
        ResultSet rs = (ResultSet) cstmt.getObject(2);
        while(rs.next()){
         System.out.println(rs.getString(1));
         System.out.println(rs.getString(2));
        }

 

=========================================

 

 

最后看了这么一篇评论:

--------------------------

http://unixboy.javaeye.com/blog/167807

 

我运行的时候发现NUMBER型 的可以插入,VARCHAR2类型的就不行!
我改了一下!
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME VARCHAR2 (50),
LOCATION VARCHAR2 (50)
);
改成:
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME nVARCHAR2 (50),
LOCATION nVARCHAR2 (50)
);
然后就可以了!
不过我不知道为什么这么改就没问题!

 

======================================

 

于是乎 我将我的 emptype 中定义 varchar 改为 nvarchar

竟然成功了

 

create or replace type emptype as object
(
  eno  number(4),
  ename nvarchar2(20)
);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值