我变了一个包:
create or replace package ptabc.TOOLS is
TYPE MYRS IS TABLE OF PTABC.ABC.A%TYPE INDEX BY BINARY_INTEGER;
type myCursor is ref cursor;
procedure GETMYRS(P_RS OUT MYRS);
end TOOLS;
包体:
create or replace package body PTABC.TOOLS is
procedure GETMYRS(P_RS OUT MYRS)
IS
CUR myCursor;
BEGIN
open CUR FOR
SELECT A FROM ABC;
FETCH CUR BULK collect INTO P_RS;
CLOSE CUR;
END GETMYRS;end TOOLS;在java中
CallableStatement proc;
try {
proc = connection.prepareCall("{call ptabc.TOOLS.GETMYRS(?)}");
proc.registerOutParameter(1,Types.OTHER);
proc.execute()
ResultSet rs=(ResultSet) proc.getObject(1);
while(rs.next())
{
System.out.print(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
运行后提示:
java.sql.SQLException: 无效的列类型
因为我的MYRS是自定义的集合类型,不知道改用哪个类型?
还有,如果我想用TYPE MYRS IS TABLE OF PTABC.ABC%ROWTYPE;
好像包编译通不过,但不提示我错误在哪儿。请赐教!
create or replace package ptabc.TOOLS is
TYPE MYRS IS TABLE OF PTABC.ABC.A%TYPE INDEX BY BINARY_INTEGER;
type myCursor is ref cursor;
procedure GETMYRS(P_RS OUT MYRS);
end TOOLS;
包体:
create or replace package body PTABC.TOOLS is
procedure GETMYRS(P_RS OUT MYRS)
IS
CUR myCursor;
BEGIN
open CUR FOR
SELECT A FROM ABC;
FETCH CUR BULK collect INTO P_RS;
CLOSE CUR;
END GETMYRS;end TOOLS;在java中
CallableStatement proc;
try {
proc = connection.prepareCall("{call ptabc.TOOLS.GETMYRS(?)}");
proc.registerOutParameter(1,Types.OTHER);
proc.execute()
ResultSet rs=(ResultSet) proc.getObject(1);
while(rs.next())
{
System.out.print(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
运行后提示:
java.sql.SQLException: 无效的列类型
因为我的MYRS是自定义的集合类型,不知道改用哪个类型?
还有,如果我想用TYPE MYRS IS TABLE OF PTABC.ABC%ROWTYPE;
好像包编译通不过,但不提示我错误在哪儿。请赐教!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货