mybatis和oracle的问题. 20C

select
a.name,
a.salary,
${text} text
from table a

类似这种的sql,mybatis传递过来的text参数如果是单纯的一个字符串可以正常执行,
但是现在的问题是text里的参数为:('aaa','bbb','ccc')这样的格式。所以执行就非法了。
请问该怎么写呢。因为我级联查询,需要像其他mapper查询传递参数
图片说明
图片说明

0

8个回答

这种传参的话,一般我们会使用 list/map/数组 来进行传参然后在 mapper 中使用foreach 循环来去 map 中的值来拼接,举个例子:

  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
            #{item}  
 </foreach>  
1

'aaa','bbb','ccc'换成'aaa,bbb,ccc'

0

$ 换成 # 试一下

0

aaa','bbb','ccc'以集合的形式传,在xml用循环获取

0

举个例子:
<!-- 动态foreach -->

SELECT * FROM USER

<!-- 自定义类List集合 变量 开始 结束 分割 -->

#{id}

<!-- and id in (1,10,16) -->


这样应该可以

0

这块我之前遇到过这样试试 加上单引号
![图片说明](https://img-ask.csdn.net/upload/201806/14/1528908745_799480.png)图片说明

0

图片说明

0

如果需要在查询结果中输出"'a','b','c'"(不包含双引号),需要进行如下转义:

SELECT '\'a\',\'b\',\'c\'' text FROM DUAL;

题主在MyBatis映射文件中用了美元符号($),而美元符号取值时仅仅是替换原参数,不会做任何修改优化:
···
SELECT (${text}) text FROM DUAL;
···
传入"'a','b','c'"后变为:
···
SELECT ('a','b','c') text FROM DUAL;
···
这个SQL语句在加了括号的情况下会报错,括号去掉后又得不到想要的结果。

解决:
尝试把美元符号($)替换为井号(#),如果不行,那只能对参数中的单引号进行转义了。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle下mybatis批量下载的问题
由于oracle的语法问题,导致在使用mybatis进行批量插入时,会出现许多的问题,我费了好大的力气才弄好。大概总结了一下,有这么几个需要注意的地方: 1,需要写出列名,不能直接用values插入所有的值。 2,在foreach的separator应该使用“union all”,而不是想mysql那样直接用 “ , ”。foreach中应该使用 select ... from dual的格式
mybatis和oracle问题
我在后台拼接了一个字符串 比如'1,2,3,4,5',然后我在mybatis用#str进行传值,rnmybatis里面SQL是:[code=sql]SELECT * FROM TABLE T WHERE T.ID NOT IN (SELECT COLUMN_VALUE FROM TABLE(SPLIT(#str)))[/code]rnrn问题是:我把后台执行完的SQL单独拿出来去PL/SQL执行查不到数据,但是在后台总会显示一条数据(数据库只有一条数据)
【mybatis】mybatis oracle批量插入数据
参考:mybatis 对 oracle 的批量操作:https://blog.csdn.net/dzhuqiaolun/article/details/54864521 写法一: &amp;lt;insert id=&quot;insertAttractionsBatch&quot; parameterType=&quot;java.util.List&quot; useGeneratedKeys=&quot;false&quot;&amp;gt; insert i...
Mybatis Oracle批量插入问题记录
重点:Oracle不支持insert into table values(),(),......这种语法。因此,我们可以考虑以下两种方式实现批量插入1、多条insert into语句(但是效率比较低)&amp;lt;foreach  collection=&quot;list&quot; item=&quot;bean&quot; index=&quot;index&quot; separator=&quot;;&quot;&amp;gt;        &amp;lt;insert id=&quot;xx
Mybatis 调用oracle 效率问题
写了一个function qx(uid,pid)rn在某个查询语句中这样写select * from customer where delflag=1 and 1=qx(#id);rn这样会查询很慢。rnrncreate or replace function qx(uId varchar2)rn return varchar2 isrn hasXq varchar2(20) :='0';rn adminCount number:=0;rnbeginrn--是否是管理员rn select count(*) into adminCount from user_role where user_id=uId and role_id=1;rn if adminCount>0 thenrn hasXq:='1';rn elsern hasXq:='0';rn end if;rn return hasXq;rnend;rnrnrn若果不用函数直接这样写select * from customer where delflag=1 and 1=( select count(*)from user_role where user_id=uId and role_id=1)就很快rnrnrn若果还是想用function该怎么改,才能优化查询效率
mybatis 在oracle中批量插入
在oracle中批量插入和mysql中略有不一样。在<foreach></foreach> 标签中需要这样写。foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";"> update qcres <set>
mybatis连接oracle实例
这是一个用mybatis框架连接oracle数据库的例子,可在eclipse上运行,需要在oral建test表包涵(id,age,username,password)字段,
mybatis使用oracle关键字
**mybatis中如果使用的字段是oracle的关键字,会出现错误 解决方式是 可以使用resultMap**<!-- 预约日历用 --> <resultMap id="FullDateResultMap" type="com.haier.hrssc.reserveschedual.dto.FullcalendaDTO"> <id property="id" colum
mybatis批量插入数据到oracle出错
在程序中封装一个List集合对象,然后把该集合中的实体插入到数据库中,因为项目使用了MyBatis,所以打算使用MyBatis的foreach功能进行批量插入。期间遇到了“SQL 命令未正确结束 ”的错误,最终解决,记录下来供以后查阅和学习。
Mybatis增删改查之Oracle
Mybatis增删改查之Oracle 一. 查询 普通查询(返回普通的持久层对象,由于数据库字段风格和java不同,所以建立一个map映射) &amp;lt;resultMap type=&quot;com.xxx.domain.RuleCondition&quot; id=&quot;RuleConditionResultMapWithoutBondList&quot;&amp;gt; &amp;lt;id column=&quot;RC_ID&quot; jdbc...
mybatis调用存储过程-oracle
1.输入输出参数 &amp;lt;select id=&quot;checkingProcess&quot; parameterMap=&quot;checkingParaMap&quot; statementType=&quot;CALLABLE&quot;&amp;gt; CALL P_CHECKING(?,?,?,?,?) &amp;lt;/select&amp;gt; &amp;lt;select id=&quot;cancelCheck&quot; parameterType=&quot;
Java mybatis Oracle (SQL)!!!
SQL部分rn```rn rnrnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn SELECT a.SERVICE_NO,a.CUST_REPORT_DT,a.SERVICE_TYPE,a.FAULT_SYM_CODE,a.CONTACT_NAME,a.CONTACT_TEL,a.SR_NO,a.SRC_NO,rn a.SR_CREATE_TIME,TO_CHAR(a.CLEARANCE_DATE, 'YYYYMMDDHH24MISS'),a.CLOSE_STAFF_ID,a.SRS_RETURN_VAL,a.SRS_SQL_TXT,rn a.ALARM_MSG1 || ', ' || a.ALARM_MSG2 || ', ' || a.ALARM_MSG3 || ', ' ||a.ALARM_MSG4 || ', ' || a.ALARM_MSG5rn FROM SRACTIVITY a, CCT_SR_RULE brn WHERE b.WORK_GROUP_ID = #workGroupIdrn AND a.SERVICE_NO = b.SERVICE_NOrn AND a.ALARM_MSG1 != 'SR CLOSED'rn rn rn $whereClausern rn rn rn rn $order.property $order.directionrn rn rn rn ORDER BY a.SERVICE_NOrn rn rnrnrn```rn现在出问题是这个column,rn```rn rnrn```rnSQL中对应的是rn```rn a.ALARM_MSG1 || ', ' || a.ALARM_MSG2 || ', ' || a.ALARM_MSG3 || ', ' ||a.ALARM_MSG4 || ', ' || a.ALARM_MSG5rnrn```rn如果按照我这样写的,“alarmMessage”返回的值是null,在数据库查出来的是有值的。rn请问这个column该怎么填?rn```rn rnrn```rnrn
Mybatis实现Oracle批量插入
之前用的SqlSessionDaoSupport,但是网上搜了下,发现getSqlSession()不能设置ExecutorType,所以又自己重写了一个类,为SqlSession设置了ExecutorType,Mapper里使用[code=html]rn insert into student ( ) rn values rn rn (null,#item.name,#item.sex,#item.address,#item.telephone,#item.tId)rn rn[/code]会报错,ORA-00933: SQL 命令未正确结束,ORACLE应该不支持这种写法吧,然后改成这样[code=html]rnrn rn insert into student ( ) rn values rn (null,#item.name,#item.sex,#item.address,#item.telephone,#item.tId)rn rn[/code]还是报错,谁遇到过这种情况,帮忙看下,多谢了,另外问下mybaits这种批量插入的方式如果用SPRING管理事物,中途插入异常会回滚吗?
Mybatis直接插入oracle序列号
-
mybatis批量查询(oracle)
insert id="insertMenusRoles"> insert into menus_roles foreach collection="param1" item="item" index="index" separator="union all" >            select #{item,jdbcType=INTEGER},#{param2.roleid,jdbc
oracle下mybatis中的批量更新
&amp;lt;update id=&quot;updateBatch&quot;  parameterType=&quot;java.util.List&quot;&amp;gt;     &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; index=&quot;index&quot; open=&quot;begin&quot; close=&quot;;end;&quot; separator=&quot;;&quot
MyBatis之Oracle和Mysql模糊查询
Oracle: // 两种方式 select * from user where name like concat('%',#{name},'%') select * from user name like '%'||#{name}||'%' Mysql: select * from user where name like concat('%',#{name},'%')
mybatis批量插入数据到oracle
JAVA testMapper.addTest(testList);   配置文件 &amp;lt;insert id=&quot;addTests&quot; parameterType=&quot;java.util.ArrayList&quot;&amp;gt; insert into TEST(t_id,t_des,t_status) SELECT T.* FROM( &amp;lt;foreach co...
MyBatis Oracle 主键生成
[code=XML]rnrn rn select person_seq.nextVal from dualrn rn insert into person(pid, pname, age, birthday )rn values( #pid, #pname, #age, #birthday )rnrn[/code]rn[code=Java]rn// addrnPerson person = new Person();rn//person.setPid(99);rnperson.setPname("周");rnperson.setAge(23);rnperson.setBirthday(Date.valueOf("2009-09-09"));rn rnimpl.addPerson(person);rn[/code]rn异常信息:rnCause: org.apache.ibatis.type.TypeException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException: 无效的列类型rnrn映射文件改成:rn[code=XML]rnrn rn select person_seq.nextVal from dualrn rn insert into person(pid, pname, age, birthday )rn values( #pid,jdbcType=INTEGER, #pname,jdbcType=VARCHAR, rn #age,jdbcType=INTEGER, #birthday,jdbcType=DATE )rnrn[/code]rn异常信息:rn### Cause: java.sql.SQLException: ORA-01400: 无法将 NULL 插入 ("SCOTT"."PERSON"."PID")rnrn故此怀疑是主键的问题,但也不是很确定,所以“MyBatis Oracle 主键生成”这个标题不合适了。rn我用的是MyBaits,不是之前的IBatis。rn那位兄弟知道这个问题出在哪里呢,指点指点。rn
mybatis + oracle demo
mybatis + oracle demo 比较简单的例子、入门很试用哦~
Mybatis批量插入Oracle的小坑
Service public boolean foreachinsert(Test2 test) { // TODO Auto-generated method stub List&amp;lt;Test2&amp;gt; list = new ArrayList&amp;lt;&amp;gt;(); Test2 t = null; try { for(int i = 0;i&amp;lt;6;i++)...
Mybatis Oracle批量插入、更新
Mybatis Oracle批量插入、更新与Mysql有区别,先记录一下,具体代码等整理好上传。
mybatis插入oracle的序列号
使用oracle的序列号 先查询出下一个序列号,且会自动注入到参数中的指定属性上(本例中的id属性), 插入完成后, controller中的user对象的id属性也有值了 SELECT seq_changez_user.nextval id from dual insert into temp_changez_user (id, username) value
mybatis 对 oracle 的批量操作,
1:返回插入新数据的主键(主键序列自增) SELECT SQ_SYS.Nextval AS ID from DUAL insert into sys_language_type ( ID, UPDATE_TIME ) values ( #{ID}, #{UPDATE_TIME} ) 获取方式:map.
mybatis批量插入数据到 oracle
oracle批量插入数据方法: 方法一: &lt;insert id="addList" parameterType="java.util.List" useGeneratedKeys="false"&gt; INSERT ALL &lt;foreach item="item" index="index" collection="list"&gt; ...
使用mybatis批量插入数据到oracle
java开发的,一个新闻包括标题,内容,任意张图片等,我在新闻实体类中图片用List保存,但怎么插入到oracle数据库中呢,这里数据库中图片时单独保存在一张表里的。使用的是mybatis。高手帮帮忙,解决了,分数都给你。
Oracle批量插入(Mybatis中)
Oracle批量插入(Mybatis中)
mybatis调用存储过程(oracle)
存储过程: create or replace procedure pro_add(p1 in number,p2 in number,p3 out number) as begin   p3:=p1+p2; end; 函数: create or replace function fun_add(p1 in number,p2 in number) return number a
Mybatis的批量添加(Oracle、MySQL)
Mybatis的批量添加(Oracle、MySQL) 说下今天的感触,网上的真的是参差不齐,报错还多,折腾了一天,自己总结一下,给大家参考一下,都是自己写的,并且测试过的代码!!!!! 话不多说,直接上源码!!!!! 一、Oracle的批量添加 &amp;lt;!-- 批量导入用户 --&amp;gt; &amp;lt;insert id=&quot;insertUsers&quot; parameterTy...
Oracle的系统时间,Mybatis的写法
        在Oracle数据库中,sysdate可以代表当前系统的时间。         如果需要在Mybatis中插入当前时间,可以参考下面的SQL语句。 insert into T_User(id,IDCARD,DATE,NAME) values(#{id},#{idCard},sysdate,#{name})         当然了,如果你是mysql数据库,使用now()函数...
mybatis generator oracle
mybatis generator 自动生成oracle代码 mapper dao;自己调试了下,修改配置文件generatorConfig.xml中的数据库配置和需要导出的表后,运行start.cmd就自动生成了;
Mybatis Oracle 批量插入数据的方法
Mybatis Oracle 批量插入数据的方法版权声明:本文为博主原创文章,未经博主允许不得转载。最近做项目遇到了从Mybatis批量插入数据到Oracle系统中,网上大多数都是基于Mysql。废话不多说直接贴代码 <!-- 批量插入数据 --> <insert id="insert" parameterType="java.util.Map"> insert into A表 (
Mybatis的批量插入(oracle、MySQL)
1:数据库使用oracle时,Mybatis的批量插入语句如下: insert into PERSONAL_MESSAGE_SET (PERSONAL_MESSAGE_SET_ID, ACCOUNT_ID, MODULE_CODE, RECEIVE_TIME_AFTER, STATE_REMIND_LA
MyBatis调用oracle的自定义函数
fn_no_make这个就是我的方法名字。直接调用传入参数。经过实验证明该方式可行insert into application (application_id, serial_number, application_type, applicant, agent, process_id,
oracle 数据库使用记录,mybatis
property里的是传过来的属性名 STA.LAST_UPDATE_DATE =]]> to_date(#threeRecptDate1#,'YYYY-MM-DD HH24:mi:ss') STA.LAST_UPDATE_DATE to_date(#threeRecptDate2#,'YYYY-MM-DD HH24:mi:ss') 24小时的形式显示出
mybatis批量插入数据到oracle
&amp;lt;insert id=&quot;batchInsertB2B&quot; parameterType=&quot;ArrayList&quot;&amp;gt; insert into xxxxtable(hkgs,hkgsjsda,office,asdf,ddd,ffff,supfullName,classtype,agent_type,remark) &amp;lt;foreach collection=&quot;list&quot; item=&quot;...
Mybatis 批量插入数据到Oracle
    最近项目有个功能,需要批量插入数据,使用的orm框架的是mybatis,在此记录一下     以oracle中scott用户的emp表为例     其中EMPNO为主键,HIREDATE为DATE类型,SAL、COMM、DEPTNO为NUMBER类型        oracle批量插入数据语法:       INSERT INTO table_name (column...
mybatis的oracle数据库操作
我们在使用mybatis操作数据库时,需要两个jar包,分别是ojdbc.jar和mybatis.jar分别用以链接数据库和操作数据库使用。 然后呢,就该配置核心配置文件了。 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dt
MyBatis针对ORACLE的批量插入
MyBatis针对ORACLE的批量插入
mybatis针对oracle批量插入数据
在Oracle中,insert批量插入数据: INSERT ALL INTO A(field_1,field_2) VALUES (value_1,value_2) INTO A(field_1,field_2) VALUES (value_3,value_4) INTO A(field_1,field_2) VALUES (value_5,value_6) SELECT 1 FROM ...