偶然一次查看旧系统的存储过程的代码时,发现赋值操作都是:
SELECT 1234 INTO v_Value FROM dual;
这样的语法。
我以前也是做SQL SERVER开发的,在SQL SERVER中我也常用:SELECT v_Value=1234这样的语法来赋值。估计写这些代码的人可能也有SQL SERVER的背景。
比起 v_Value := 1234; 这样的赋值语法,FROM dual这样的语法会不会有什么效率损失呢?于是做了如下测试:
DECLARE
v_Count
NUMBER
(
10
) :
=
1
;
BEGIN
LOOP
v_Count :
=
v_Count
+
1
;
EXIT
WHEN
v_Count
>
100000
;
END
LOOP;
END
;
下面使用dual的语法:
DECLARE
v_Count
NUMBER
(
10
) :
=
1
;
BEGIN
LOOP
SELECT
v_Count
+
1
INTO
v_Count
FROM
dual;
EXIT
WHEN
v_Count
>
100000
;
END
LOOP;
END
;
执行一下, v_Value := 1234; 这样的语法简直比from dual这样的语法快太多了。
SO, 注意不要使用from dual这种低效的赋值语法。
SELECT 1234 INTO v_Value FROM dual;
这样的语法。
我以前也是做SQL SERVER开发的,在SQL SERVER中我也常用:SELECT v_Value=1234这样的语法来赋值。估计写这些代码的人可能也有SQL SERVER的背景。
比起 v_Value := 1234; 这样的赋值语法,FROM dual这样的语法会不会有什么效率损失呢?于是做了如下测试:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
执行一下, v_Value := 1234; 这样的语法简直比from dual这样的语法快太多了。
SO, 注意不要使用from dual这种低效的赋值语法。