日期:2014-05-20  浏览次数:20711 次

怎样在java里面调用oracle里面的自定义数据类型
SQL>   SET   SERVEROUTPUT   ON

SQL>   Create   Or   Replace   Procedure   lunartest2   Is
    2           TYPE   NumTab   IS   TABLE   OF   emp.empno%TYPE;
    3           TYPE   NameTab   IS   TABLE   OF   emp.ename%TYPE;
    4           enums   NumTab;   --   no   need   to   initialize
    5           names   NameTab;
    6     BEGIN
    7           SELECT   empno,   ename   BULK   COLLECT   INTO   enums,   names   FROM   emp;
    8           FOR   i   in   enums.FIRST..enums.LAST   LOOP
    9                 DBMS_OUTPUT.PUT_LINE(enums(i)   ||   '   '   ||   names(i));
  10           END   LOOP;
  11     END;
  12     /

如果这样存储过程   我想把enums作为一个结果集返回   而不是只输出
那么存储过程未lunartest2   (enums   out   numTab)

那么在java里面调用的时候
CallableStatement     stmt   =   connect.prepareCall( "{call   lunartest2   (?)} ");
stmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);  

这里试过oracle.jdbc.OracleTypes.CURSOR
是出错的   报错调用   lunartest2   时参数个数或类型错误

不知道应该是什么类型呢


------解决方案--------------------
4 NumTab out enums;
存储过程的第四行改成这样试试,感觉你是没有定义out的参数,整个的存储过程没有输出
------解决方案--------------------
谢谢楼上的 存储过程输出已经没问题了 单独在oracle里测试也通过了
现在问题是怎么在java里面调用