PLS-00382表达式类型错误:PL/SQL函数重载调用报错咨询
错误原因
- 重载函数匹配逻辑问题:PL/SQL 解析重载调用时,优先匹配和实参类型完全一致的函数签名。你调用时传入的
'14-07-2017'是VARCHAR2类型的字符串字面量,不是DATE类型,因此会自动匹配到入参为VARCHAR2、返回值为NUMBER的print_it重载函数。 - 赋值类型不兼容:你声明的接收变量
sample_date是DATE类型,匹配到的重载函数返回的是NUMBER类型,二者无法直接隐式转换,因此抛出PLS-00382: expression is of wrong type报错。
修复方案
方案1:显式转换入参为日期类型(最推荐)
将字符串字面量用to_date显式转换为DATE类型,让解析逻辑匹配到对应重载:
sample_date := over_load.print_it(to_date('14-07-2017','dd-mm-yyyy'));
该方案可以避免会话NLS_DATE_FORMAT参数差异导致的隐式转换报错问题。
方案2:调用时指定参数名强制匹配
调用时显式指定参数名,强制匹配对应重载函数,Oracle会自动按会话默认日期格式将字符串转换为DATE类型:
sample_date := over_load.print_it(v_date => '14-07-2017');
注:该方案依赖会话日期格式配置,存在不稳定风险,不建议生产环境使用。
内容的提问来源于stack exchange,提问作者Sasikumar Gunasekaran
相关产品推荐
相关产品推荐

