繁体   English   中英

从Java将字符串数组传递给pl / sql函数

[英]Passing Array of string to pl/sql function from java

我正在尝试将值数组从Java传递给PL / SQL函数。 我正在尝试如下

String[] array = {"70" , "2" , "4" , "9" , "329" , "13" , "49" , "33"};
Connection cnn=DriverManager.getConnection(url, username, password);
 ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("VLIST", cnn);
ARRAY array_to_pass = new ARRAY(descriptor, cnn,array);
 OracleCallableStatement pstmt = (OracleCallableStatement) cnn.prepareCall("{? = call  GETSRCHLST2(?)}");
pstmt.registerOutParameter(1, Types.VARCHAR);
 pstmt.setArray(2, array_to_pass);
pstmt.execute();
String output = pstmt.getString(1);
out.println(output+"\n"+ " "+array_to_pass.length());

在此函数调用中,未传递任何数组内容,但array_to_pass.length()为8。

Oracle过程:

CREATE OR REPLACE FUNCTION EDR.GETSRCHLST2(VV VLIST) RETURN VARCHAR2 IS

BN NUMBER;
STRS VARCHAR2(9000):='start';
HH varchar2(30);

BEGIN

STRS:=STRS || '- LIST COUNT: '||VV.COUNT||' - ';
BN:=VV.FIRST;

WHILE BN IS NOT NULL
LOOP

   HH:=VV(BN);
   STRS:=STRS||HH||' , ';
   BN := VV.NEXT(BN);   

END LOOP;

RETURN STRS;

EXCEPTION WHEN OTHERS THEN RETURN 'SOME ERROR'||SQLERRM;
end;

谁能告诉我,我要去哪里错了?

希望它可以帮助那些寻求相同解决方案的人。

CREATE OR REPLACE
TYPE DR.VLIST AS TABLE OF VARCHAR2(50)

但是从数组中的java传递的值将不匹配VARCHAR,而是期望使用NVARCHAR。 因此,

CREATE OR REPLACE
TYPE DR.VLIST AS TABLE OF NVARCHAR2(50)

它解决了我的问题。

不建议使用oracle.sql.ARRAY 相反,您可以调用OracleConnection.createOracleArray(String arrayTypeName,Object elements)
请注意, arrayTypeName应该是类型表,elements应该是Java数组T[] ,其中T对应于arrayTypeName是其列表的类型。 (这可以是实现SQLData的类)

有关更多信息,您可能会发现我对getArray()和writeArray()的回答很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM