Vic*_*tor 1 sql-server oracle plsql
在SQL Server中,性能明智,使用IF EXISTS (select * ...)比IF (select count(1)...) > 0... 更好.
但是,看起来甲骨文不允许EXISTS在IF声明中,这样做会有什么替代方法,因为使用IF select count(1) into...效率非常低效?
代码示例:
IF (select count(1) from _TABLE where FIELD IS NULL) > 0 THEN
UPDATE TABLE _TABLE
SET FIELD = VAR
WHERE FIELD IS NULL;
END IF;
Run Code Online (Sandbox Code Playgroud)
编写代码片段的最佳方法是
UPDATE TABLE _TABLE
SET FIELD = VAR
WHERE FIELD IS NULL;
Run Code Online (Sandbox Code Playgroud)
即只是做更新.它会处理行还是不处理.如果你需要检查它是否确实处理了行,那么之后再添加
if (sql%rowcount > 0)
then
...
Run Code Online (Sandbox Code Playgroud)
通常在你有逻辑的情况下
declare
v_cnt number;
begin
select count(*)
into v_cnt
from TABLE
where ...;
if (v_cnt > 0) then..
Run Code Online (Sandbox Code Playgroud)
最好使用ROWNUM = 1,因为如果有4000万行你就不要关心.只有在找到1行后Oracle才会停止.
declare
v_cnt number;
begin
select count(*)
into v_cnt
from TABLE
where rownum = 1
and ...;
if (v_cnt > 0) then..
Run Code Online (Sandbox Code Playgroud)
要么
select count(*)
into v_cnt
from dual
where exists (select null
from TABLE
where ...);
Run Code Online (Sandbox Code Playgroud)
你喜欢哪种语法.
| 归档时间: |
|
| 查看次数: |
2250 次 |
| 最近记录: |