You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:13:11