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

如何跨模式引用PL/SQL包中的记录类型

跨模式引用包中自定义记录类型的解决方案

错误原因

你之前的尝试均误用了%TYPE和%ROWTYPE属性:

  • %TYPE用于获取变量、列或常量的类型,不能直接作用于自定义记录类型本身
  • %ROWTYPE用于获取表或游标行的结构,同样不适用于自定义记录类型

正确引用方式

由于schema_1.package_a.r_user_type是已公开的自定义记录类型,且schema_2已拥有该包的EXECUTE权限,直接将其作为变量类型即可,无需附加任何属性。

正确的Package Body写法

create or replace package body schema_2.package_b as
  procedure display_user_info
  is
    -- 直接引用跨模式包中的记录类型
    r_user_info  schema_1.package_a.r_user_type;
  begin
    -- 注意:查询字段的数量、顺序和类型必须与记录类型完全匹配
    select '张三', 'zhangsan@example.com'
      into r_user_info.name, r_user_info.email
      from dual;
    -- 若查询结果结构完全匹配记录类型,也可直接整体赋值
    -- select name, email into r_user_info from your_user_table where id = 1;
  end;
end;

若Package规范中需使用该类型

如果package_b的规范部分(即包定义的声明段)要暴露该类型或用它作为参数/返回值,同样直接引用即可:

create or replace package schema_2.package_b as
  procedure display_user_info(p_user_info in schema_1.package_a.r_user_type);
end;

关键注意事项

  • 确认schema_1已向schema_2授予package_a的EXECUTE权限(你已完成此操作)
  • 赋值时必须保证数据源的字段与记录类型的字段在数量、顺序、数据类型上完全匹配,否则会触发类型不匹配错误

内容的提问来源于stack exchange,提问作者McRivers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:20:26