存储过程如下:
CREATE OR REPLACE TYPE Person AS OBJECT
(
p_code VARCHAR2(32),
p_name VARCHAR2(16),
p_age NUMBER,
p_birthday DATE
);
CREATE OR REPLACE TYPE person_table_type IS TABLE OF Person;
--创建过程
CREATE OR REPLACE PROCEDURE testtableofobject(v_table OUT person_table_type) IS
BEGIN
v_table := person_table_type();
FOR i IN 1 .. 5 LOOP
v_table.EXTEND;
v_table(i) := NEW person('45212319880810435' || i,
'侯廷文' || i,
20 + i,
to_date('1985-08-1' || i, 'YYYY-MM-DD'));
END LOOP;
END testtableofobject; JAVA中调用
OracleCallableStatement cstmt = (OracleCallableStatement) con
.prepareCall("{call testtableofobject(?)}");
cstmt.registerOutParameter(1, OracleTypes.ARRAY, "person_table_type.toUpperCase()");
cstmt.execute();
ARRAY array = cstmt.getARRAY(1);
Datum[] datas = array.getOracleArray();
for (int i = 0; i < datas.length; i++) ...{
System.out.print(i + ": ");
Datum[] personAttributes = ((STRUCT) datas[i])
.getOracleAttributes();
System.out.print("p_code:"
+ new String(personAttributes[0].getBytes()) + " ");
System.out.print("p_name:"
+ new String(personAttributes[1].getBytes()) + " ");
System.out.print("p_age:" + personAttributes[2].intValue() + " ");
System.out.print("p_birthday:" + personAttributes[3].dateValue()
+ " ");
System.out.println();
} 问题:
调用该存储过程cstmt.registerOutParameter(1, OracleTypes.ARRAY, "person_table_type.toUpperCase()")
时,自定义类型person_table_type.toUpperCase能否通过JDBC查询出来?
通过DatabaseMetaData 查询参数类型时只能查询到出口参数类型为OBJECT DatabaseMetaData dbmd = connection.getMetaData();
ResultSet rs = dbmd.getProcedureColumns(null, "TECH", procedureName.toUpperCase(), null);
while (rs.next())
{
String type = rs.getObject("TYPE_NAME").toString(); 麻烦帮忙解决,谢谢!
CREATE OR REPLACE TYPE Person AS OBJECT
(
p_code VARCHAR2(32),
p_name VARCHAR2(16),
p_age NUMBER,
p_birthday DATE
);
CREATE OR REPLACE TYPE person_table_type IS TABLE OF Person;
--创建过程
CREATE OR REPLACE PROCEDURE testtableofobject(v_table OUT person_table_type) IS
BEGIN
v_table := person_table_type();
FOR i IN 1 .. 5 LOOP
v_table.EXTEND;
v_table(i) := NEW person('45212319880810435' || i,
'侯廷文' || i,
20 + i,
to_date('1985-08-1' || i, 'YYYY-MM-DD'));
END LOOP;
END testtableofobject; JAVA中调用
OracleCallableStatement cstmt = (OracleCallableStatement) con
.prepareCall("{call testtableofobject(?)}");
cstmt.registerOutParameter(1, OracleTypes.ARRAY, "person_table_type.toUpperCase()");
cstmt.execute();
ARRAY array = cstmt.getARRAY(1);
Datum[] datas = array.getOracleArray();
for (int i = 0; i < datas.length; i++) ...{
System.out.print(i + ": ");
Datum[] personAttributes = ((STRUCT) datas[i])
.getOracleAttributes();
System.out.print("p_code:"
+ new String(personAttributes[0].getBytes()) + " ");
System.out.print("p_name:"
+ new String(personAttributes[1].getBytes()) + " ");
System.out.print("p_age:" + personAttributes[2].intValue() + " ");
System.out.print("p_birthday:" + personAttributes[3].dateValue()
+ " ");
System.out.println();
} 问题:
调用该存储过程cstmt.registerOutParameter(1, OracleTypes.ARRAY, "person_table_type.toUpperCase()")
时,自定义类型person_table_type.toUpperCase能否通过JDBC查询出来?
通过DatabaseMetaData 查询参数类型时只能查询到出口参数类型为OBJECT DatabaseMetaData dbmd = connection.getMetaData();
ResultSet rs = dbmd.getProcedureColumns(null, "TECH", procedureName.toUpperCase(), null);
while (rs.next())
{
String type = rs.getObject("TYPE_NAME").toString(); 麻烦帮忙解决,谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货