create or replace PROCEDURE PROC_TEST (res IN ArrayList ,rest OUT VARCHAR2) AS BEGIN dbms_output.put_line(res.count); rest := res(res.count); END PROC_TEST;存储过程上面有点错误, 更正成上面的
create or replace PROCEDURE PROC_TEST (res IN ArrayList ,rest OUT VARCHAR2) pl/sql里有ArrayList类型
可以换一种方式: 在oracle中声明数组类型 create or replace type tabarray is table of varchar2(38) ;构造存储过程: procedure PROC_TEST(res in tabarray,rest OUT VARCHAR2) is begin dbms_output.put_line(res.count); rest := res(res.count); end; 然后在java中构造如下代码: OracleConnection conn = null; OracleCallableStatement stmt = null; String[] param = { "1001", "1002", "1006" }; stmt =conn.prepareCall("{call PROC_TEST (?,?)}"); ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TABARRAY", conn); stmt.setARRAY(1, new ARRAY(descriptor,conn,param)); stmt.registerOutParameter(2, OracleTypes.ARRAY, "TABARRAY"); stmt.execute(); 不妨试试看
oracle: Arrays in other languages become VARRAYs in PL/SQL.所以你的第一句: create or replace type ArrayList as table of varchar2(64); 改为 create or replace TYPE ArrayList IS VARRAY(10) OF varchar2(64)这样应该可以了
(res IN ArrayList
,rest OUT VARCHAR2)
AS
BEGIN
dbms_output.put_line(res.count);
rest := res(res.count);
END PROC_TEST;存储过程上面有点错误, 更正成上面的
(res IN ArrayList
,rest OUT VARCHAR2) pl/sql里有ArrayList类型
在oracle中声明数组类型
create or replace type tabarray is table of varchar2(38) ;构造存储过程:
procedure PROC_TEST(res in tabarray,rest OUT VARCHAR2) is
begin
dbms_output.put_line(res.count);
rest := res(res.count);
end;
然后在java中构造如下代码:
OracleConnection conn = null;
OracleCallableStatement stmt = null;
String[] param = { "1001", "1002", "1006" };
stmt =conn.prepareCall("{call PROC_TEST (?,?)}");
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TABARRAY", conn);
stmt.setARRAY(1, new ARRAY(descriptor,conn,param));
stmt.registerOutParameter(2, OracleTypes.ARRAY, "TABARRAY");
stmt.execute(); 不妨试试看
create or replace type ArrayList as table of varchar2(64);
改为
create or replace TYPE ArrayList IS VARRAY(10) OF varchar2(64)这样应该可以了
我自己的感觉好像是数据库的问题, 原先在自己的电脑上通过java代码调用这个存储过程是一切没有问题的
但一直到另一台电脑上的时候就出问题了, java调用不行, 但在sqlplus里直接exec存储过程是没问题的.
今天又重新安装了一个oracle数据库, 新部署调用也没有问题所以判断为那个数据库上原因.
创建ArrayList这个类型是没有问题的
createDescriptor时类型的名称必须是大写的