mybatis 操作存储过程 小细节错误

项目开发的时候遇到一个错误:

<span style="font-size:24px;">org.springframework.jdbc.BadSqlGrammarException:
### Error querying database.  Cause: java.sql.SQLException: ORA-06550: 第 8 行, 第 4 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
 . ( ) , * @ % & = - + < / >
   at in is mod remainder not rem => <an exponent (**)>
   <> or != or ~= >= <= <> and or like like2 like4 likec between
   || indicator multiset member submultiset
符号 ")" 被替换为 ";" 后继续。

### The error may exist in file [D:\Program Files\Workspaces\MyEclipse for Spring 2014\salesmanb2b\WebRoot\WEB-INF\classes\sqlmap\ProductMapper.xml]
### The error may involve com.salesmanb2b.mapper.ProductMapper.getProductsProc-Inline
### The error occurred while setting parameters
### SQL: {call GET_PRODUCTS   (    ?,    ?,    ?,    ?,    ?    }
### Cause: java.sql.SQLException: ORA-06550: 第 8 行, 第 4 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
 . ( ) , * @ % & = - + < / >
   at in is mod remainder not rem => <an exponent (**)>
   <> or != or ~= >= <= <> and or like like2 like4 likec between
   || indicator multiset member submultiset
符号 ")" 被替换为 ";" 后继续。

; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-06550: 第 8 行, 第 4 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
 . ( ) , * @ % & = - + < / >
   at in is mod remainder not rem => <an exponent (**)>
   <> or != or ~= >= <= <> and or like like2 like4 likec between
   || indicator multiset member submultiset
符号 ")" 被替换为 ";" 后继续。</span>

原来是映射文件出错

<span style="font-size:24px;">        <select id="getProductsProc" parameterType="java.util.Map" statementType="CALLABLE">

        {call GET_PRODUCTS
        (
         #{proid,jdbcType=INTEGER, mode=IN},
         #{product1,javaType=ResultSet,jdbcType=CURSOR,resultMap=product,mode=OUT},
         #{product2,javaType=ResultSet,jdbcType=CURSOR,resultMap=product,mode=OUT},
         #{product3,javaType=ResultSet,jdbcType=CURSOR,resultMap=product,mode=OUT},
         #{product4,javaType=ResultSet,jdbcType=CURSOR,resultMap=product,mode=OUT}
         )
         }  

     </select>  </span>

call后面 右括号  忘了写

这是一个小细节

PS:

对于Oracle存储过程

建议 用navicat 编写好之后运行 成功再去编写代码

时间: 2024-10-06 22:41:05

mybatis 操作存储过程 小细节错误的相关文章

spring中set注入的一些小细节错误

这是小白偶尔一直null指针的错误,调试了好久,原来是自己对spring注入的不够了解 我相信有很多跟我差不多的初学者会遇上,所以特地写出来,防止有人跟我一样.哈哈,也写上去,以防自己下次还犯这样的错误. 一样,首先,举个反例 所有类 有个城市类 有个华北地区类,有个城市类的集合属性 同上,华南地区类 index.jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="GB1

mybatis的一些小细节

Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. 数据库连接频繁开启和释放,对数据库的资源是一种浪费. 设想如何解决? 使用数据库连接池管理数据库连接. 3. 向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值) 设想如何解决? 能否也通过配置的方式,配置设置的参数,自动进行设置参数 4. 解析结

mybatis 操作动态表+动态字段+存储过程

mybatis 操作动态表+动态字段+存储过程 存储过程   statementType="CALLABLE" <!-- 计算金额存储过程--> <update id="getCalcDistributorSettle" statementType="CALLABLE" parameterType="java.util.Map"> <![CDATA[ CALL procCalcDistributo

强壮你的C和C++代码30个小细节

1 初始化局部变量 使用未初始化的局部变量是引起程序崩溃的一个比较普遍的原因, 2 初始化WINAPI 结构体 许多Windows API都接受或则返回一些结构体参数,结构体如果没有正确的初始化,也很有可能引起程序崩溃.大部分Windows API结构体都必须有一个cbSIze参数,这个参数必须设置为这个结构体的大小. 注意:千万不要用ZeroMemory和memset去初始化那些包括结构体对象的结构体,这样很容易破坏其内部结构体,从而导致程序崩溃. 3 检测函数输入参数有效性 在函数设计的时候

注意编码工作中的小细节

人们常说"细节决定成败". 编码工作中,同样需要关注细节. 本文将给出3个小实例来说明编码中关注细节的重要性,同时给出作者对如何注意编码细节的一点见解(说的不对,请指正). 例1 这个问题如此地显而易见,竟然没有被发现. List<int> numList = new List<int>(); numList.Add(3); numList.Add(1); numList.Add(4); numList.Add(2); numList.Add(5); numLi

APP设计当中不容忽视的20个小细节

1.一致,一致,还是一致你能做的最重要的事情就是保证用户界面运作的一致性.对于列表框来说,如果双击其中的项,使得某些事件发生,那么双击任何其它列表框中的项,都应该有同样的事件发生.所有窗口按钮的位置要一致,标签和讯息的措辞要一致,颜色方案要一致.用户界面的—致性使得在用户对于界面运作建立起精确的心理模型,从而降低培训和支持成本.提炼:一致性体现在 色彩搭配和运用.字体的运用.相同的交互效果等.一般我们使用的色彩不超过3种.交互效果也不超过3种.2.建立标准并遵循之在应用软件中保持一致的唯一途径就

apache配置虚拟主机时需要注意到几个小细节

如今apache在web服务器这块市场占有率还是很高的,而配置虚拟主机现在也是用的非常多,不过在配置虚拟主机的时候一定要注意几个小细节. 首先要注意你的apache版本,注意是2.2还是2.4的. 配置2.2的时候,配置虚拟主机该这样写: NameVirtualHost ip:80   //注意此处与2.4不同 <VirtualHost ip:80> ServerName www1.myweb.com DocumentRoot "/myweb/vhost/www1" <

关于if语句中的小细节

if语句都会用,但是有一些小细节并不容易被发现. 比如我们不应该写这样的代码: if(flag==0) flag为布尔变量,布尔变量的值为真或假,用0表示假,真是多少是不一样的. 所以我们应该避免将布尔变量与0或1这样的整型值进行比较. 那么我们也不应该写这样的代码: if(i) i为一个整型变量,但是写成上面那样就会被人误以为是布尔值,良好的编程习惯是这样的: if(i==0)或if(i!=0) 还有重要的一点是,我们不能将float型和double型数据与0这种整型变量进行==或!=. 因为

mybatis调用存储过程

最近在研究mybatis调用存储过程,发表一下自己的学习心得 其中最好用的就是通过map传值,结果还用这个map接收,因为map是一个非常强大的东西,有时候存储过程要操作多张表. 比如说:往多张表插入数据,用JavaBean的方式就很难做到,参数对应多个实体类不好解决,用map就能完美的解决这个问题. Map<String, Object> map=new HashMap<String, Object>把需要的参数往里面一放,就能很容易解决问题 dao层(dao接口),在dao接口