sql = "begin "
+ "delete mtgSelectedContactext where siteid = ? and confid=? and uuid in"
+ "(select uuid from mtgSelectedContact where siteID = ? AND confID = ?"
+ "end;";
这是一条SQL语句。
形式 delete Table where column in(select * from Table where ...),
当子查询结果集超过1024条可能会出现潜在的问题,不知这里该怎么修改,
好像可以写个procedure,可是我不太会,不知哪位大虾可以指点指点?
先谢谢了:)
+ "delete mtgSelectedContactext where siteid = ? and confid=? and uuid in"
+ "(select uuid from mtgSelectedContact where siteID = ? AND confID = ?"
+ "end;";
这是一条SQL语句。
形式 delete Table where column in(select * from Table where ...),
当子查询结果集超过1024条可能会出现潜在的问题,不知这里该怎么修改,
好像可以写个procedure,可是我不太会,不知哪位大虾可以指点指点?
先谢谢了:)
解决方案 »
- oracle如何按照范围分列!求高手帮忙...
- ORA-01017 ORA-01031
- 新手提问,关于oracle的trigger
- 一道数据库题,请高手帮忙解答!
- 在VB中怎么运用DTS包导出Oracle中内容生成txt文件?
- 一次关于Oracle的笔试
- oracle怎么回收表owner的权限
- !!如何查找某个表关系到的所有存储过程?
- 主外键问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 一个合并结果集的问题
- asp.net+oracle开发项目,数据库session超值,帮帮忙,急!~高分
- 请问Oracle里面可以Create DOMAIN吗?
可以使用下面的SQL:
------------------delete mtgSelectedContactext
where siteid = ?
and confid=?
and exists(
select 1
from mtgSelectedContact
where siteID = ?
AND confID = ?
and uuid = mtgSelectedContactext.uuid
)
mtgSelectedContactext表的siteid 和 confid好像和
mtgSelectedContact 表的 siteid 和 confid是等于关系,如果这样
可以这样写:
-----------------------------------
delete mtgSelectedContactext
where exists(
select 1
from mtgSelectedContact
where siteID = mtgSelectedContactext.siteID
AND confID = mtgSelectedContactext.confID
and uuid = mtgSelectedContactext.uuid
)在siteID ,confID ,uuid 创建Index。
这样不知怎么样?
-----------------------------------
delete mtgSelectedContact
where uuid
between
(select min(uuid) from mtgSelectedContact where siteid=? and confid=? and usertype=?)
and
(select max(uuid) from mtgSelectedContact where siteid=? and confid=? and usertype=?)
SQL不能那样写,那样写的话就把所有相同的siteid and confid都删除了,传过来的siteid and confid就没有意义了,right?
exists也看什么情况,如果Index正确的了,绝对比In快,
不过Oralce网站上也有说明,在特定环境下,in比exists快。
我就遇到这个问题,exists需要10分钟,in 50秒就可以,
主要是嵌套表内数据命中率比较低。如果可以提供执行计划,这样才能找到真正原因。