我正在尝试执行一个简单的语句,但在执行时出现错误。
begin
dbms_output.put_line('Addition: '||4+2);
end;
但是当我用 * 运算符执行时,它运行良好。
begin
dbms_output.put_line('Addition: '||4*2);
end;
有谁知道背后的原因?
最佳答案
这是由于 Operator Precedence 。
乘法的优先级高于串联。因此, 'Addition: '||4*2
计算为 'Addition: '||8
和 'Addition: 8'
。
加法与串联具有相同的优先级,并且具有相同优先级的运算符从左到右求值。
因此, 'Addition: '||4+2
计算为 'Addition: 4' + 2
,随后失败,因为您无法向字符添加数字。
在这种情况下,您应该始终使用方括号明确指定计算顺序,例如 'Addition: '|| (4+2)