Bug:AddQueue对于Oracle数据库生成的sql不完整!!是不是我用错了? 返回

经过测试 使用AddQueue ,对于 Oracle数据库,最终SaveQueues生成的SQL执行时会报错,错误:ORA-00911: 无效字符。
使用下面的语句查询Oracle执行的语句,发现SaveQueues生成的语句没有问题,但是没有在sql前加begin,sql后没有end;
select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT from v$sqlarea b order by b.FIRST_LOAD_TIME desc
oracle版本是:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
程序调试Aop生成的SQL截图如下:
如果不使用AddQueue ,单独执行每条语句是正常的, 这个问题我应该如何避开 ?
热忱回答(10)
-
高彬 VIP0
5天前var
db = GetInstance();
db.Insertable<Student>(
new
Student() { Name =
"a"
}).AddQueue();
db.Updateable<Student>(
new
Student() { Name =
"b"
}).AddQueue();
db.SaveQueues()
上面写法生成的SQL大概是这样:
insert into student(id,name) values(0,'a')
update student set name='b' where id=0
但是对于 Oracle数据库,需要在sql前后加begin和end!,大概应该这样:
begin insert into student(id,name) values(0,'a'); update student set name='b' where id=0; end
0 回复 -
fate sta VIP0
5天前会加的
0 回复 -
fate sta VIP0
5天前AOP看SQL
0 回复 -
高彬 VIP0
5天前我重新做了测试,通过Aop输出的sql没有 begin和end,请查看我的截图:
db.Aop.OnLogExecuting = (sql, para) => { Console.WriteLine($"{sql}"); };
0 回复 -
fate sta VIP0
5天前db.AddQueue("begin;"); db.Updateable(updateObj).AddQueue(); db.Updateable(updateObj).AddQueue(); db.AddQueue("end;"); db.SaveQueues();
0 回复 -
fate sta VIP0
5天前ORALCE不推荐这个方法,你可以按上面的用法
0 回复 -
高彬 VIP0
4天前@fate sta:请教一下:如果oracle不推荐这个方法,那么向数据库的批量提交,应该如何写呢 ?麻烦推荐一下方法。
0 回复 -
高彬 VIP0
4天前@fate sta:测试了,开发者主动加 db.AddQueue("begin;");db.AddQueue("end;"); 对于 oracle 是可以正常执行sql的。
0 回复 -
fate sta VIP0
4天前@高彬:用事务处吧,批量操作都有方案文档 ORACLE中有
0 回复 -
fate sta VIP0
4天前比如你上面的代码可以优化成
db.Update(实体)改成db.Update(list<实体>)
0 回复