【问题标题】:Error When Accessing plsql function: invalid name pattern访问 plsql 函数时出错:名称模式无效
【发布时间】:2012-06-03 09:19:55
【问题描述】:

我有一个返回数组的函数,我从 java 调用这个函数来获取值。

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

这可能是什么原因,我该如何解决这个错误?

谢谢

【问题讨论】:

    标签: java oracle jdbc plsql


    【解决方案1】:

    它必须是大写的:

    callablestatement.registerOutParameter(1, OracleTypes.ARRAY,"DATES");
    

    更新:哦,我发现我在哪里看到了类似的问题:https://stackoverflow.com/a/2787880/617455

    【讨论】:

      【解决方案2】:

      您定义了 4 个参数:

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

      但只设置了三个:

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

      【讨论】:

      • 这是一个拼写错误。谢谢
      【解决方案3】:

      我遇到了同样的问题,但是这些解决方案都没有为我解决。

      我发现我意识到的 PL/SQL 中缺少一些 类型

      【讨论】:

      • 例如需要请求类型 CREATE OR REPLACE TYPE "COMPANY_ARRAY" is VARRAY(20) OF DATE ,这样如果数据库中不存在DATES就需要创建。
      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2012-03-15
      • 1970-01-01
      • 2018-01-09
      • 2023-03-12
      相关资源
      最近更新 更多