-- 自定义字符数组类型,作为传入参数
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。)知道的朋友帮忙看下,谢谢!
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。)知道的朋友帮忙看下,谢谢!
这是个java的变量吧,不是oracle的类型
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;
估计要是
String[] strArray = new String[]{"aaa","bbb"}'
这样调用估计是不行的,你看看Java中支不支持自定义的类型(TYPE)吧
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);
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();