Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORA 06502错误PL/SQL_Sql_Oracle_Plsql_Oracle11g - Fatal编程技术网

ORA 06502错误PL/SQL

ORA 06502错误PL/SQL,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我试图执行一个简单的语句,但执行时出错 begin dbms_output.put_line('Addition: '||4+2); end; 错误: ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误 ORA-06512:在第2行 但是当我用*操作符执行时,它工作得很好 begin dbms_output.put_line('Addition: '||4*2); end; 有人知道背后的原因吗?这是由于 乘法的优先级高于串联。因此,'Addition:'| 4*2计算为'A

我试图执行一个简单的语句,但执行时出错

begin
dbms_output.put_line('Addition: '||4+2);
end;
错误: ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误 ORA-06512:在第2行

但是当我用*操作符执行时,它工作得很好

begin
dbms_output.put_line('Addition: '||4*2);
end;
有人知道背后的原因吗?

这是由于

乘法的优先级高于串联。因此,
'Addition:'| 4*2
计算为
'Addition:'| 8
'Addition:8'

加法与串联具有相同的优先级,具有相同优先级的运算符从左到右求值。 因此,
'Addition:'| | 4+2
的计算结果为
'Addition:4'+2
,随后将失败,因为您无法将数字添加到字符中


在这种情况下,您应该始终使用括号来明确指定求值顺序,如下面的添加:“| |(4+2)

在我看来,实际的问题是此代码依赖于Oracle内核的隐式数据类型转换始终使用显式数据类型转换。例如:

开始 dbms_output.put_line('Addition:'| | to_char(4+2)); 结束


还有许多其他情况下,由于隐式数据类型转换,您将遇到意外错误。就像把一个varchar和数字相等地连接起来一样。只要varchar只包含数值,它就可以正常工作(尽管可能由于未使用索引而速度较慢)。但是,只要插入一行非数字数据,就会在命中该行时出错。显式地进行数据类型转换可确保Oracle不会意外地选择了相等联接的错误一侧进行转换。

尝试使用括号
dbms_输出。put_行('Addition:'|(4+2))
hi@Vignesh这些答案对解决您的问题有帮助吗?如果没有,请在您的问题中添加不成功的内容。当某个答案对您有帮助时,您能否通过单击旁边的空心绿色复选标记来接受该答案?第二个答案(运算符优先级)是正确的。您应该接受它如果是这样的话,那么它也应该给出错误
code
begindbms\u输出;结束
code
在OP的示例中,导致ORA-06502:的原因不是隐式数据类型转换(当然是发生的,毫无疑问,但不是主要原因)。错误的原因是运算符的优先级相同。加法(
+
)和串联(
|
)运算符具有相同的优先级,并且在表达式中从左到右求值。因此,我们最终尝试将数字2添加到
Addition:4
字符串中,该操作导致出现
ORA-06502:
错误。是的,运算符优先级最初会导致错误,但我更愿意通过应用良好的编码样式和质量度量来避免考虑运算符优先级和其他问题。在我们公司,我们希望通过要求采取预防措施来避免此类问题,即使键入的额外字符不一定总是[圣战结束:-])