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

PL/SQL自定义RECORD记录中是否可以使用%rowtype属性?

结论

你写的这种用法完全合法,PL/SQL原生支持在自定义RECORD类型内部使用%ROWTYPE声明字段。


说明

PL/SQL自定义RECORD的字段类型没有限制只能是基础标量类型,你可以正常使用类型锚定属性:

  • 用%TYPE锚定单个字段/变量的类型,也就是你示例中v_loc字段的写法
  • 用%ROWTYPE锚定整表、游标或游标变量的行结构,作为RECORD的嵌套记录字段,也就是你示例中v_emp字段的写法

你给出的代码稍作补全(加上PL/SQL块的声明、执行段框架)就可以直接运行:

DECLARE
  -- 自定义RECORD类型
  TYPE xx IS RECORD (
    v_emp   employees%ROWTYPE,
    v_loc   departments.LOCATION_ID%TYPE
  );
  -- 声明自定义类型的变量
  v_data xx;
BEGIN
  -- 赋值访问时通过多层点号定位到具体字段即可
  v_data.v_emp.employee_id := 101;
  v_data.v_emp.last_name := 'Kochhar';
  v_data.v_loc := 1700;
END;
/
注意事项
  • 代码编译阶段,你用%ROWTYPE、%TYPE锚定的表、字段必须真实存在,且当前编译用户拥有对应对象的访问权限,否则会抛出编译错误
  • 除了锚定数据库表的%ROWTYPE,你也可以在RECORD字段中锚定显式游标、强类型游标变量的%ROWTYPE,用法完全一致
  • 嵌套的行类型字段支持所有普通行类型变量的操作,比如可以直接把同结构的行记录整体赋值给v_data.v_emp,不需要逐个字段赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:54:20