偶然一次查看旧系统的存储过程的代码时,发现赋值操作都是:
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这样的语法会不会有什么效率损失呢?于是做了如下测试:
















执行一下, v_Value := 1234; 这样的语法简直比from dual这样的语法快太多了。
SO, 注意不要使用from dual这种低效的赋值语法。