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

Oracle 19c:在UDT体内获取类型名称,有无更优替代方案?

在Oracle UDT内部获取类型名称的更优实现

你当前通过SYS.ANYDATA转换SELF来获取类型名的方案虽然可行,但确实存在冗余——仅为获取类型元数据而依赖ANYDATA组件,开销不必要。

以下两种更"自然"的实现方式,无需ANYDATA转换:

方法一:通过TYPEID关联数据字典视图

利用SYS.TYPEID(self)获取当前UDT的唯一类型标识符,直接查询USER_TYPES视图获取类型名:

not final instantiable member function get_type_name
  return varchar2
is
  l_type_name varchar2(200);
begin
  select type_name
    into l_type_name
    from user_types
   where typeid = sys.typeid(self);
  return l_type_name;
end;

该方法直接从数据字典读取元数据,轻量且直观,默认情况下当前用户对USER_TYPES拥有访问权限。

方法二:使用DBMS_TYPES内置函数

调用DBMS_TYPES.GET_TYPE_NAME函数,传入SELF的TYPEID即可直接返回类型名:

not final instantiable member function get_type_name
  return varchar2
is
begin
  return dbms_types.get_type_name(sys.typeid(self));
end;

此方式代码更简洁,GET_TYPE_NAME会自动解析TYPEID对应的类型名称。若返回结果包含模式前缀,可按需用REPLACE或正则表达式移除(不过当前用户下的类型通常仅返回纯类型名)。

这两种方案均避免了ANYDATA的转换开销,更贴合UDT内部获取自身类型信息的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:20:03