mybatismysql触发器_MyBatis创建Oracle触发器java版本查看
今天⽤mybatis创建oracle触发器的时候出现了⼀点问题,创建触发器的代码如下
Java代码
CREATE OR REPLACE TRIGGER ${triggerName}
AFTER INSERT ON ${tableName}
FOR EACH ROW
慕课登录平台
BEGIN
INSERT INTO S_CDC(TABLENAME,MODETYPE,DATASYS,TIMESTAMP) VALUES  ('${tableName}', 'A', :NEW.SYSCODE, 'B'); END;
创建的时候报错了:如下:
mysql语句转oracle
Java代码
### Error updating database.  Cause: java.sql.SQLException: 索引中丢失  IN 或 OUT 参数:: 1
### The error may involve com.unissoft.ateTrigger_U_oracle-Inline
### The error occurred while setting parameters
### SQL: CREATE OR REPLACE TRIGGER D_PRJ2_0002CDCTger_U  AFTER UPDATE ON D_PRJ2_0002  FOR EACH ROW
### Cause: java.sql.SQLException: 索引中丢失  IN 或 OUT 参数:: 1
但是创建mysql,sqlserver类似的触发器没有问题
最后发现BEGIN 中插⼊值的时候⽤到了:new,
因为这些是写到了xml⽂件⾥⾯,所以我觉得有可能是因为:影响的,
有可能在解析xml⽂件的时候,:影响了解析,没有办法将:new写⼊sql语句
但是暂时还没有解决办法(因为是刚涉及mybatis,所以不排除我的写法有问题)
个人博客论坛源码
今天这个问题已经解决,解决的⽅法如下
Java代码
CREATE OR REPLACE TRIGGER ${triggerName}
AFTER INSERT ON ${tableName}
FOR EACH ROW
BEGIN
通配符是什么公司
INSERT INTO S_CDC(TABLENAME,MODETYPE,DATASYS,TIMESTAMP) VALUES  ('${tableName}', 'A', :NEW.SYSCODE, 'B'); END;
在原来写的基础上,添加上属性statementType="STATEMENT" ,因为mybatis statementType属性有三种值,
(statement,preparedstatement,callablestatement。)默认的值是preparedstatement,预编译的。
因此有可能在预编译的时候没有通过,报了错
后来我查了⼀下这三者之间的区别:
Statement 每次执⾏sql语句,数据库都要执⾏sql语句的编译 ,最好⽤于仅执⾏⼀次查询并返回结果的情形,效率⾼于PreparedStatement.
PreparedStatement是预编译的,使⽤PreparedStatement有⼏个好处
odbc数据源没有mysql
a. 在执⾏可变参数的⼀条SQL时,PreparedStatement⽐Statement的效率⾼,因为DBMS预编译⼀条SQL当然会⽐多次编译⼀条SQL的效率要⾼。
b. 安全性好,有效防⽌Sql注⼊等问题。
c.  对于多次重复执⾏的语句,使⽤PreparedStament效率会更⾼⼀点,并且在这种情况下也⽐较适合使⽤batch;
d.  代码的可读性和可维护性。
CallableStatement接⼝扩展 PreparedStatement,⽤来调⽤存储过程,它提供了对输出和输⼊/输出参数的⽀持。CallableStatement 接⼝还具有对 PreparedStatement 接⼝提供的输⼊参数的⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。