首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-06550: PLS-00103:遇到带TypeHandler的符号"“

ORA-06550: PLS-00103:遇到带TypeHandler的符号"“
EN

Stack Overflow用户
提问于 2018-04-30 08:52:12
回答 1查看 381关注 0票数 0

我使用TypehandlerList<Dep>映射到oracle数组。下面是处理程序中的setPArameter方法:

代码语言:javascript
复制
    public void setParameter(PreparedStatement ps, int i, List<Dep> parameter, JdbcType jdbcType)
            throws SQLException {
        Connection connection = ps.getConnection();
//      StructDescriptor structDescriptor = StructDescriptor.createDescriptor("MEMS_ARR", connection);
        Struct[] structs = null;
        if(parameter != null && parameter.size() >0) {
            structs = new Struct[parameter.size()];
            for (int index = 0; index < parameter.size(); index++)
            {
                Dep dep = parameter.get(index);
                Object[] params = new Object[7];
                params[0] = dep.getOrder();
                params[1] = dep.getIdTp;
                params[2] = dep.getId();
                params[3] = " ";
                params[4] = " ";
                params[5] = " ";
                params[6] = " ";
    //            STRUCT struct = new STRUCT(structDescriptor, ps.getConnection(), params);
                structs[index] = connection.createStruct("MEMS", params);
            }
    //        ArrayDescriptor desc = ArrayDescriptor.createDescriptor("MEMS_ARR", ps.getConnection());
    //        ARRAY oracleArray = new ARRAY(desc, ps.getConnection(), structs);
        }else {
            parameter = new ArrayList<DependentDTO>();
            structs= new Struct[0];
        }
        this.parameter = parameter;
        Array oracleArray = ((OracleConnection) connection).createOracleArray("MEMS_ARR", structs);
        ps.setArray(i, oracleArray);
    }

下面是MEMS类型:

代码语言:javascript
复制
create or replace TYPE MEMS AS OBJECT 
( MEM1          NUMBER(2,0),
  MEM2          VARCHAR2(1),
  MEM3          VARCHAR2(15),
  MEM4          VARCHAR2(60),
  MEM5          VARCHAR2(1),
  MEM6          VARCHAR2(40),
  MEM7          VARCHAR2(10)
);

下面是使用Typehandler的xml映射文件的部分:

代码语言:javascript
复制
#{nat,javaType=String,jdbcType=VARCHAR,mode=IN}, --nat
**#{deps,javaType=List,jdbcType=ARRAY,mode=IN,jdbcTypeName=MEMS_ARR,typeHandler=com.my.package.MyHandler}, --mems**
#{res,javaType=String,jdbcType=VARCHAR,mode=OUT} --res

错误日志如下:

代码语言:javascript
复制
Error querying database. Cause: java.sql.SQLException: ORA-06550: line 31, column 5: PLS-00103: Encountered the symbol "" when expecting one of the following: . ( ) , * @ % & = - + < / > at in is mod remainder not rem => <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || indicator multiset member submultiset The symbol "(" was substituted for "" to continue. ORA-06550: line 44, column 4: PLS-00103: Encountered the symbol ";" when expecting one of the following: . ( ) , * % & = - + < / > at in is mod remainder not rem => <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset ### The error may exist in file [E:\path\to\mapper\ADao.xml] ### The error may involve my.package.ADao.mthodToCall -Inline ### The error occurred while setting parameters ### SQL: {call MY_PROC( ... , --nat?, **--mems? --res**)}

正如您在日志中所看到的,mems被替换为空字符串或与下一个arg res合并.逗号不存在

还请注意,我已经在mybatis代码中进行了调试,并认识到调用了映射setParameter方法,并将输入列表正确地映射到oracle数组.这个问题发生在真正的电话中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-30 10:11:22

实际上问题是我忽略了前两个参数之间的一个逗号.但是错误指向要查看的错误参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50097042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档