Oracle + mybatis 调用存储过程遇到的问题
数据库  /  管理员 发布于 3年前   200
我程序预期是调用存储过程执行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、检查在()里面,除了变量和“+”号,全部变成红色。多写你就会很熟练,直接写出来都可以了,不用那么麻烦。
路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..博主 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 @ mashrdn 多切换几个节点测试,免费ssr是没那么稳..mashrdn 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 V2rayn免费节点添加上去了,youtobe无法打开网页,是怎么回事..张伟 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 3q!有用,不过免费节点隔天就要去git上复制新的导进去..博主 在
科学上网翻墙访问Google , 上外网神器佛跳墙VPN(永久免费)使用流程步骤中评论 该篇教程已不能用了,告知大家,免的老有老铁问我!..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号