当前位置: 首页 > news >正文

GBase 8s 中嵌套表return as value与return as locator的区别

在 数据库中,嵌套表(nested table)是一种集合数据类型,可以存储零个或多个元素,这些元素可以是标量类型或对象类型。嵌套表可以通过两种主要方式返回给调用者:RETURN AS VALUE 和 RETURN AS LOCATOR。这两种方式在性能和功能上有一些重要的区别。

默认为return as value,return as value返回值,return as locator返回引用。


RETURN AS VALUE

  • 内存占用:当使用 RETURN AS VALUE 时,嵌套表的数据会随调用返回的结果集一起传输。这意味着整个嵌套表的数据会被复制到调用者的内存空间中。
  • 性能:由于数据需要在客户端和服务器之间传输,对于大型嵌套表,这种方式可能会消耗较多内存和带宽,影响性能。
  • 用法:这种方式适用于嵌套表数据相对较小的情况,或者当嵌套表数据需要在客户端进行大量处理时。
  • 访问方式:调用者可以直接访问和操作返回的嵌套表数据,无需额外的数据库访问。

RETURN AS LOCATOR

  • 内存占用:RETURN AS LOCATOR 返回的是一个指向嵌套表数据的引用(locator),而不是实际数据本身。这意味着只有引用信息会被传输,而不是整个嵌套表的数据。
  • 性能:由于只传输引用信息,这种方式通常比 RETURN AS VALUE 更节省内存和带宽。然而,当需要访问嵌套表数据时,数据库访问仍然需要发生,这可能引入额外的延迟。
  • 用法:这种方式适用于嵌套表数据较大,或者当只需要访问嵌套表的一小部分数据时。通过引用,可以按需从数据库中检索数据。
  • 访问方式:调用者需要通过引用(locator)来访问嵌套表数据,这通常涉及额外的数据库操作,如使用 DBMS_LOB 包或特定的数据库函数来检索数据。


总结

  • RETURN AS VALUE:适用于小型嵌套表或需要在客户端进行大量处理的情况。数据随结果集一起返回,便于直接访问,但可能消耗较多内存和带宽。
  • RETURN AS LOCATOR:适用于大型嵌套表或只需要访问部分数据的情况。返回的是数据引用,节省内存和带宽,但访问数据时需要额外的数据库操作。


完整示例:

create database testdb with log; set environment sqlmode 'oracle'; create type typ1 is table of int;/ create table tmp_1(c1 typ1) nested table c1 store as ntmp_1; create table tmp_2(c1 typ1) nested table c1 store as ntmp_2 return as locator; info tables; insert into tmp_1 values(typ1(1,3,5,7)); insert into tmp_2 values(typ1(1,3,5,7)); select * from tmp_1; --查询c1字段显示typ1(1,3,5,7) select * from tmp_2;--查询c1字段显示(REFCURSOR) select * from ntmp_1; select * from ntmp_2; drop table ntmp_1;--报错313 drop table tmp_1;--将tmp_1与ntmp_1全部删掉 info tables; drop table ntmp_2;--报错313 info tables; drop table tmp_2; create table tmp_3(c1 typ1) nested table c1 store as ntmp_3 return as value; --同tmp_1 info tables; insert into tmp_3 values(typ1(1,3,5,7)); select * from tmp_3; select * from ntmp_3; drop table tmp_3; info tables; drop type typ1;


执行结果图:

本文的介绍了 GBase 8s 中嵌套表 RETURN AS VALUE 和 RETURN AS LOCATOR 两种返回方式的区别。 RETURN AS VALUE 适用于小型嵌套表或需要在客户端进行大量处理的场景,而 RETURN AS LOCATOR 适用于大型嵌套表或只需要访问部分数据的场景。根据实际需求选择合适的方式,可以优化应用程序的性能和资源使用。如果你在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!

http://www.jsqmd.com/news/767429/

相关文章:

  • Python 筑基篇(三)数据容器详解
  • FastAgent插件:模块化AI代理如何提升Claude Code编程效率
  • 微信聊天记录清空了还能恢复吗?2 个方法找回清空聊天记录
  • 利用快马平台快速构建Hermes Agent多模态AI演示原型
  • Go开发者必备:andrewstuart/openai库实战指南与最佳实践
  • React声明式数据表格方案:基于Schema与适配器的企业级实践
  • GBase 8a之按sql查看集群资源使用情况工具
  • 构建生产级AI智能体基础设施:从架构设计到成本优化的实战指南
  • Pytorch图像去噪实战(四十二):真实噪声数据集训练实战,解决合成噪声模型落地效果差问题
  • 2026年比较好的椒江豪车维修保养/椒江维修保养实力公司推荐 - 品牌宣传支持者
  • 深入解析libclang的多维数组处理
  • 区域知识产权信息管理:创新监管,智慧服务
  • 胶州移动宽带哪家是源头厂家
  • MCP2122红外编解码器与主机控制器的UART接口设计
  • 娱乐圈天降紫微星自带气运,海棠山铁哥无背景照样登顶巅峰
  • 艾尔登法环调试工具:3步解锁游戏隐藏玩法
  • 【仅限首批认证工程师获取】MCP 2026沙箱隔离动态适配白皮书(含NIST SP 800-190A对齐对照表及12项合规检查项)
  • AI编程助手成本监控利器:agenttop本地任务管理器实战指南
  • Rust 模块系统与可见性控制实战:构建清晰的代码结构
  • 本地代码智能引擎CIE:基于MCP协议为AI助手注入语义理解能力
  • 保姆级教程:用CloudCompare一键搞定点云最小包围盒(附PCA原理白话解读)
  • 四、Linux Shell 面试必背 | 五、数据仓库理论
  • Android边缘设备机械爪控制:开源库架构、实现与工程实践
  • SketchUp模型高效导出CAD施工图:平面、立面、剖面及效果图的DWG导出全解析
  • 打卡信奥刷题(3220)用C++实现信奥题 P8287 「DAOI R1」Flame
  • MCP 2026租户隔离配置正在失效?——2025年12月补丁强制升级倒计时72小时,附迁移检查清单
  • 告别标准库:用STM32CubeMX+HAL库玩转蓝桥杯CT117E开发板的5个实战项目
  • 论文AI率达标线是多少?实测5款降AIGC工具一键消AI痕迹
  • 深入ARM GIC与Xilinx SDK封装:手把手拆解Zynq中断控制器驱动层设计
  • 怎样高效制作电子书:WebToEpub网页转换的实用教程