2012-05-29 44 views
0

我有一个返回数组的函数,我从java调用这个函数来获取值。访问plsql函数时出错:函数名无效

PL/SQL代码

create or replace type dates 
     is array(10000) of varchar2(32) 

功能

CREATE OR REPLACE function datefunc ( 
    id1 IN number, 
    id2 IN NUMBER  

) 
    RETURN dates 
AS 
    datearray   dates; 
    sdate  VARCHAR2 (32); 
    edate  VARCHAR2 (32); 
BEGIN 

Java代码

 connection = datacon.getConnection(); 
        callablestatement = 
    connection.prepareCall("begin ? :=datefunc(?,?,?); end;"); 
        callablestatement.registerOutParameter 
(1, OracleTypes.ARRAY,"dates"); 
        callablestatement.setInt(2, param1); 
        callablestatement.setInt(3, param2); 
        callablestatement.execute(); 

但是,当我执行我的代码我得到

java.sql.SQLException: invalid name pattern: schema.dates 

这可能是什么原因以及如何解决此错误?

感谢

回答

1

您定义的4个PARAMS:

connection.prepareCall("begin ? :=datefunc(?,?,?); end;"); 

但只设置其中三个:

callablestatement.registerOutParameter(1, OracleTypes.ARRAY,"dates"); 
callablestatement.setInt(2, param1); 
callablestatement.setInt(3, param2); 
+0

这是一个错字错误。谢谢 – user75ponic

1

我有同样的问题,但是,这些解决方案都不适合我。

我想出了一些类型在PL/SQL中缺少我意识到的东西。

+0

例如,应该需要请求类型CREATE OR REPLACE TYPE“COMPANY_ARRAY”是VARRAY(20)OF DATE,因此如果DATES在数据库中不存在,则需要创建。 –