我正在尝试执行一个简单的语句,但在执行时出现错误。

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)

10-06 00:57