我程序预期是调用存储过程执行Update操作,表名需要传参数拼
最终版代码:
mapping.xml部分代码:
<select id="updateBrandAByBrand" statementType="STATEMENT"> <![CDATA[ {call BRAND_${_parameter}('${_parameter}')}]]> </select>
存储过程部分代码:
CREATE OR REPLACE PROCEDURE BRAND_A0101(tabname IN VARCHAR2) AS v_sql VARCHAR2(300); BEGIN v_sql:='update T_EXTERNAL_PRODS_TEMP_'||tabname||'_2 set BRANDNAME_A = TRIM(REPLACE(BRANDNAME,'' '','' '')) where BRANDNAME is not null'; EXECUTE IMMEDIATE v_sql; -- EXEC BRAND_A0101(v_num); END BRAND_A0101;
就为拼T_EXTERNAL_PRODS_TEMP_A0101_2这个表名,直接写 Update 拼表名貌似数据库会报错,需要转成字符串在执行,同时遇到第二个问题 后面单引号,解决的方式是2个单引号代表1个单引号转义 其实还可以用 char(39), select char(39) 结果也是 ‘
这样理解吧:
1、''是字符界定符,告诉SQL你输入的是字符,SQL已经知道@sitemtext是字符类型,所以不需要。
2、LIKE '%XXX%' 可以拆分为 '%' + 'XXX' + '%','XXX' = @sitemtext。
3、EXEC执行字符串:@sitemtext对于EXEC来说变量,但对于EXEC内部的字串指令来说,它是常量,在运行EXEC之前,@sitemtext必然有个确定值(比如@sitemtext='TEST'),如果用1点代替3点,则变成“……NID = TEST……”,那字串指令将TEST解析为对象名。
4、道理同上。
比较笨的方法(也是避免错误的最佳方法):
A、全部先不加点:
exec (declare mycursor cursor for select top @maxitems SID,NID,NTime from (select top @mycount * from V_PC_DOWNUPDATE where BName like '%@sitemtext+%') as MyTable order by NTime desc)
B、加首尾两点:
exec ('declare mycursor cursor for select top @maxitems SID,NID,NTime from (select top @mycount * from V_PC_DOWNUPDATE where BName like '%@sitemtext+%') as MyTable order by NTime desc')
C、给字串指令解析为数字的变量加1点:
exec ('declare mycursor cursor for select top ' + @maxitems + ' SID,NID,NTime from (select top ' + @mycount + ' * from V_PC_DOWNUPDATE where BName like '%@sitemtext+%') as MyTable order by NTime desc')
C、给字串指令解析为字符的变量加3点:
exec ('declare mycursor cursor for select top ' + @maxitems + ' SID,NID,NTime from (select top ' + @mycount + ' * from V_PC_DOWNUPDATE where BName like ''%' + @sitemtext + '%'') as MyTable order by NTime desc')
D、检查在()里面,除了变量和“+”号,全部变成红色。多写你就会很熟练,直接写出来都可以了,不用那么麻烦。
相关推荐
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
在已有的spring+mybatis 基本操作oracle数据库的基础上,增加了3个调用存储过程的例子:无返回值、返回结果集、返回多个结果,希望对大家能有所帮助
主要介绍了Mybatis调用Oracle存储过程的方法介绍,需要的朋友可以参考下
mybatis调用orclae存储过程
ibatis调用oracle存储过程分页
springboot继承mybatis后,通过mybatis调用oracle数据库中创建的存储过程,并获取通过游标返回的数据。
怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据?接下来通过本文给大家介绍Mybatis传list参数调用oracle存储过程,需要的朋友可以参考下
使用MyBatis框架配置Oracle和MySql中存储过程与函数的调用。 分别描述了两种方式的实现:基于XML方式和注解方式。 其中Oracle所使用版本为Oracle11g_XE版,MySQL为5.7版本
mybatis调用Oracle存储过程(无参、有入出参)等各种情况例子的详细使用方法 1.无参存储过程调用 2.入参存储过程调用 3.出参存储过程调用 4.入 和 出 参存储过程调用,以及获取出参结果 5.结果集存储过程调用
oracle调用存储过程实现分页,分页,过程,存储,oracle
Java调用Oracle存储过程的方法
oracle存储过程的描述,亲自做的实验,写存储过程节约了调用浪费的时间
mybatis 各种增删改查,练习用的是oracle数据库,可以到oracle数据文件。 mybatis调用存储过程 mybatis由简单到多元 ,一对一,一对多 ,多对多 展示源码。
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan ...
spring mvc mybatis extjs 3.4 权限管理 ,调用oracle存储过程作为分页,是进销存产品开发的最好的参考案例
本人初步采用spring mvc3 mybatis3 extjs 3.4开发进销存软件,有很好的参考价值,其中数据库采用oracle,分页采用调用oracle的存储过程,有很好的学习价值,若是想开发简单的CRM和进销存系统是极品参考的系统。...
├── huyan-huxin-mybatis -- 基于后台数据层代码生成接口 ├── huyan-huxin-netty -- 后台聊天系统接口 └── huyan-huxin-hello -- 基于聊天功能简单网络编程实现 ``` ### 技术选型 #### 后端技术 技术 | ...
技术实现事务管理、服务日志、统一异常处理,在远程服务调用中使用RPC Context实现上下文管理,持久化框架采用Hibernate、Mybatis双框架兼容设计,使用数据访问代理服务,实现分库分表环境下的透明数据访问。...
│ Java面试题31.jdbc调用存储过程.mp4 │ Java面试题32.简单说一下你对jdbc的理解.mp4 │ Java面试题33.写一个jdbc的访问oracle的列子.mp4 │ Java面试题34.jdbc中preparedStatement比Statement的好处.mp4 │ Java...