[讨论]有没有人做过从oracle存储过程中返回数组,然后在java中进行接收处理的?

yuepengfei 2005-10-24 12:50:31
如果哪位大虾做过指点一下,谢谢!我看oracle的文档没看太明白,请有经验的兄弟参与讨论一下!
...全文
419 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcom 2005-10-25
  • 打赏
  • 举报
回复
up
柯本 2005-10-25
  • 打赏
  • 举报
回复
另外,类型定义为
CREATE OR REPLACE TYPE LIST_VARCHAR AS VARRAY(50) of VARCHAR2(500)
柯本 2005-10-24
  • 打赏
  • 举报
回复
create or replace procedure WJW_TEST(IN_BLNG_CDV IN VARCHAR2, IN_PST_CDV IN VARCHAR2,OUT_SY OUT LIST_VARCHAR, OUT_SRCH_COUNT OUT NUMBER, OUT_STATUS OUT NUMBER, OUT_SQLCODE OUT NUMBER) is
begin
OUT_SRCH_COUNT:=1;
OUT_SY:=LIST_VARCHAR('111','222','333');
end WJW_TEST;
/

yuepengfei 2005-10-24
  • 打赏
  • 举报
回复
谢谢keiy能给出WJW_TEST过程的代码吗?谢谢您的帮助!
zgysc 2005-10-24
  • 打赏
  • 举报
回复
up!
柯本 2005-10-24
  • 打赏
  • 举报
回复
搞反了,前一个是输入到oracle,这个才是输出
package dbtest;

import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;

public class oraarrt
{
public static void main(String[] argc)
{
try {

int oracleId = CharacterSet.ZHS16GBK_CHARSET;
CharacterSet dbCharset = CharacterSet.make(oracleId);

DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection
("jdbc:oracle:oci8:system/manager@ora9");
ARRAY recordArray;
String s = "{call WJW_TEST(?,?,?,?,?,?)}";
OracleCallableStatement oraclecallablestatement = (OracleCallableStatement)conn.prepareCall(s);
s = null;
String parameter1="";
String parameter2="";
oraclecallablestatement.setString(1,parameter1);
oraclecallablestatement.setString(2,parameter2);
oraclecallablestatement.registerOutParameter(3,OracleTypes.ARRAY,"LIST_VARCHAR");
oraclecallablestatement.registerOutParameter(4,2);
oraclecallablestatement.registerOutParameter(5,2);
oraclecallablestatement.registerOutParameter(6,2);
oraclecallablestatement.executeUpdate();
System.out.println("aaa"); //测试输出1
recordArray =oraclecallablestatement.getARRAY(3); //在这个地方出错

String[] values = (String[]) recordArray.getArray();
for (int i = 0; i < values.length; i++)
{
oracle.sql.CHAR out_value = new oracle.sql.CHAR(values[i],dbCharset );
System.out.println(">> index " + i + " = " + out_value);
}


System.out.println("bbb"); //测试输出2

}
catch(Exception e)
{
System.out.println(e);
}
}
}
------------------------------------------
aaa
>> index 0 = 111
>> index 1 = 222
>> index 2 = 333
bbb


柯本 2005-10-24
  • 打赏
  • 举报
回复
前几天刚写的一个测试
package dbtest;

import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;

public class oraart {

public static void main(String[] args) {

try {

DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@192.168.0.222:1521:csi", "system", "manager");
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("PARA", conn);

String[] needSave= {"2", "1"};
ARRAY mya = new ARRAY (desc, conn, needSave);

CallableStatement cs = conn.prepareCall("{ call saveAurhorize(?,?,?,?) }");
cs.registerOutParameter(4,OracleTypes.VARCHAR);
cs.setArray(1,mya);
cs.setInt(2,needSave.length);
cs.setInt(3,333);
cs.execute();
String p=cs.getString(4);
System.out.println(p);

}
catch(Exception e)
{
System.out.println(e);
}
}

}
----------------------------------------------------------
create or replace type para as varray(1000) of varchar2(4000)
---------------------------------------------------------------
create or replace procedure saveAurhorize(
inputValue in para,
inputLength in number,
busiNo in number,
retValue out varchar2) is
begin
retValue:='111';
end;
-----------------------------------------------------------------------
结果为:
111

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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