没有为同一谓词删除行,这些谓词在Select语句中给出行

时间:2014-11-04 06:53:26

标签: oracle select delete-row

DELETE
--select * 
FROM T_DIM_TOL
WHERE GTL_ID_DIM_TOL  =:DIMENSION_TOLERANCE_ID
AND GTL_SEC1_COIL_MAX =:THICKNESS_MAX
AND GTL_SEC1_COIL_MIN =:THICKNESS_MIN
AND GTL_SEC2_COIL_MAX =:WIDTH_MAX
AND GTL_SEC2_COIL_MIN =:WIDTH_MIN
and GTL_CD_COMPANY    =:COMPANY_CODE
AND GTL_CD_DEPT       =:DEPT_CODE;

使用此查询删除时,不会删除任何行。但是当使用相同的谓词触发select时,返回行(绑定变量值相同)

2 个答案:

答案 0 :(得分:0)

当我这样做时,我们得到很多关于的问题的问题我得到了这个预期的结果但是当我做一个简单的改变时,我得到了一个非常意外的结果。几乎无一例外,解决方案是不仅仅发生了“一个简单的改变”。

在您的情况下,我怀疑所有绑定变量都不相同。尝试使用硬编码值,看看是否有所作为。

可能还有其他解释:也许有一个ON DELETE触发器拦截和压制你的陈述?也许T_DIM_TOL是一个带有INSTEAD OF触发器的视图,它不能正确解释删除语句?

另一件事:你怎么知道是否没有删除?你在检查SQL%ROWCOUNT吗?或者你再次查询桌子?可能是删除成功但你没有看到它,因为你在一个不同的会话中并且事务尚未提交?

简而言之,在你的环境中会有一些特质导致这种情况发生。

答案 1 :(得分:0)

使用硬编码值,您实际上应该在SQL * Plus中看到0 rows deleted.

使用SQL%ROWCOUNT检查是否有任何行deleted

如果您发现实际删除了行,但它们在表中没有反映出来,那么您应该查看@APC已经提到的内容。