为何Oracle中chr()函数在SQL引擎与PL/SQL引擎返回结果不同?
差异原因解析
导致同一个chr()函数传入122.5却得到不同结果的核心原因,是Oracle的PL/SQL引擎与SQL引擎对非整数参数的处理规则不同:
- 在PL/SQL代码块中直接调用
chr(n)时,引擎会将非整数参数四舍五入为最近的整数。122.5被四舍五入为123,对应ASCII字符{。 - 在SQL语句(
select chr(n) into c_sql from dual)中调用chr()时,引擎会截断小数部分只保留整数部分。122.5被截断为122,对应ASCII字符z。
本质上是PL/SQL和SQL对数值类型隐式转换的规则存在差异:PL/SQL里向整数类型转换时遵循四舍五入逻辑,而SQL里的转换则直接丢弃小数部分。
内容的提问来源于stack exchange,提问作者JoseNicolau
相关产品推荐
相关产品推荐

