使用自定义数组类型的问题

wadsad 2009-06-08 06:22:35
-- 自定义字符数组类型,作为传入参数
CREATE OR REPLACE TYPE DWJBSC.STRING_ARR AS TABLE OF VARCHAR2(4000)

-- 一个简单的测试,用JAVA写的调用程序,params 赋值为 params['AAAAA','BBBBBB','CCCCC']
create or replace procedure dwjbsc.test2(params in dwjbsc.string_arr,returnStr out varchar2) is
begin
returnStr := params(1);
end testProc;

但是输出的结果时NULL。(如果输入参数类型改成VARCHAR2,赋值为'AAAAA',就输出正确的结果AAAAA。)

知道的朋友帮忙看下,谢谢!
...全文
157 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wadsad 2009-06-10
  • 打赏
  • 举报
回复
的确是JAVA调用出了问题,将驱动ojdbc14.jar替换为classes12.jar就可以了,谢谢大家。
inthirties 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 wadsad 的帖子:]
-- 自定义字符数组类型,作为传入参数
CREATE OR REPLACE TYPE DWJBSC.STRING_ARR AS TABLE OF VARCHAR2(4000)

-- 一个简单的测试,用JAVA写的调用程序,params 赋值为 params['AAAAA','BBBBBB','CCCCC']
create or replace procedure dwjbsc.test2(params in dwjbsc.string_arr,returnStr out varchar2) is
begin
returnStr := params(1);
end testProc;

但是输出的结果时NULL。(如果输入参数类型改成VARCHAR2,赋值为…
[/Quote]

java调用存储过程中有自定义类型的话,需要register这个类型在java代码里

java.sql.CallableStatement cst = con
prepareCall("call test2(?)");

oracle.sql.ArrayDescriptor des_STRING_ARRAY =
oracle.sql.ArrayDescriptor.createDescriptor("STRING_ARR", con);

oracle.sql.ARRAY arrayInOracle = new oracle.sql.ARRAY(des_STRING_ARRAY, con, strArrayObjectinJava);
cst.registerOutParameter(1, OracleTypes.ARRAY,"STRING_ARR");
cst.setArray(1, arrayInOracle);
cst.execute();


outou 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jdsnhan 的回复:]
应该是调用的时候出现了问题,参考


Java codeoracle.jdbc.OracleCallableStatement cst2 = (oracle.jdbc.OracleCallableStatement)conn.prepareCall("call ysp_compileupdate(?)");
oracle.jdbc.OracleConnection oracleConn = (oracle.jdbc.OracleConnection)conn;
oracle.sql.ArrayDescriptor Test_ARRAY1 =oracle.sql.ArrayDescriptor.createDescriptor("YSTYPE_ARRAY",oracleConn);
oracle.sql.ARRAY ora_a…
[/Quote]
jdsnhan 2009-06-09
  • 打赏
  • 举报
回复
应该是调用的时候出现了问题,参考

oracle.jdbc.OracleCallableStatement cst2 = (oracle.jdbc.OracleCallableStatement)conn.prepareCall("call ysp_compileupdate(?)");
oracle.jdbc.OracleConnection oracleConn = (oracle.jdbc.OracleConnection)conn;
oracle.sql.ArrayDescriptor Test_ARRAY1 =oracle.sql.ArrayDescriptor.createDescriptor("YSTYPE_ARRAY",oracleConn);
oracle.sql.ARRAY ora_array1 = new oracle.sql.ARRAY(Test_ARRAY1, oracleConn, id);
cst2.setArray(1, ora_array1);

eternal_hour 2009-06-09
  • 打赏
  • 举报
回复
看着你的PL SQL 似乎没有问题, 但是你的Java 中是怎么调用的呢?
估计要是
String[] strArray = new String[]{"aaa","bbb"}'
这样调用估计是不行的,你看看Java中支不支持自定义的类型(TYPE)吧
suncrafted 2009-06-08
  • 打赏
  • 举报
回复
DECLARE
TYPE STRING_ARR IS TABLE OF VARCHAR2(4000);
S_ARR STRING_ARR := STRING_ARR('AAAAA',
'BBBBBB',
'CCCCC');
RETURNSTR VARCHAR2(4000);
BEGIN
RETURNSTR := S_ARR(1);
DBMS_OUTPUT.put_line(RETURNSTR);
END TESTPROC;
suncrafted 2009-06-08
  • 打赏
  • 举报
回复
dwjbsc.string_arr参数类型出问题吧
这是个java的变量吧,不是oracle的类型

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧