PLS-00382类型不匹配错误:同结构记录类型赋值为何失败?
PLS-00382类型不匹配问题解析
问题根源
PL/SQL是强类型语言,自定义记录类型的身份由它的定义位置/作用域决定,而非字段结构。哪怕你在DECLARE块里定义的rec_type_raport_8h和包pkg_raport_8h里的类型字段完全一致,它们在编译器眼里也是两个毫无关系的独立类型,因此会触发类型不匹配错误。
解决方法
不要在DECLARE块中重新定义同名类型,直接引用包内的类型来声明变量即可:
错误写法示例:
DECLARE -- 重复定义同名类型,引发类型冲突 TYPE rec_type_raport_8h IS RECORD( price NUMBER, hour VARCHAR2(2) ); v_sum1 rec_type_raport_8h; BEGIN v_sum1 := pkg_raport_8h.get_price_elec(); -- 触发PLS-00382错误 END; /
正确写法示例:
DECLARE -- 直接引用包中定义的官方类型 v_sum1 pkg_raport_8h.rec_type_raport_8h; BEGIN v_sum1 := pkg_raport_8h.get_price_elec(); -- 类型匹配,正常执行 END; /
补充建议
如果需要在多个场景复用该记录类型,最佳实践是统一在包(或包规范)中定义,所有使用处都直接引用包内的类型,彻底避免重复定义带来的类型冲突问题。
内容的提问来源于stack exchange,提问作者Pitt Bear
相关产品推荐
相关产品推荐

