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

Oracle 19c PL/SQL中如何声明会话级表变量?

PL/SQL中使用自定义表类型变量实现内存表操作

你已经创建了全局的对象类型和表类型,接下来可以在PL/SQL块中声明表类型变量,在会话内使用,会话结束自动销毁,无需创建实体表。以下是正确的实现代码:

DECLARE
  gifts tbl_gifts; -- 声明表类型变量
BEGIN
  -- 初始化表变量(必须步骤,否则无法添加元素)
  gifts := tbl_gifts();
  
  -- 方式1:直接追加元素到表变量
  gifts.append(obj_gifts(1, 'toy'));
  gifts.append(obj_gifts(2, 'book'));
  
  -- 方式2:先扩展表空间再赋值
  gifts.extend();
  gifts(gifts.count) := obj_gifts(3, 'game');
  
  -- 查询并输出表变量中的数据
  DBMS_OUTPUT.PUT_LINE('gifts_key | gift_name');
  DBMS_OUTPUT.PUT_LINE('---------------------');
  FOR rec IN (SELECT * FROM TABLE(gifts)) LOOP
    DBMS_OUTPUT.PUT_LINE(rec.gifts_key || '        | ' || rec.gift_name);
  END LOOP;
END;
/

关键说明:

  • 表类型变量声明后必须初始化:使用gifts := tbl_gifts();创建空表,否则会触发"未初始化集合"的错误。
  • 添加元素的两种常用方式:
    • append()方法:直接将对象实例追加到表末尾,写法更简洁。
    • extend()+索引赋值:先扩展表的存储空间,再通过索引位置给元素赋值,适合需要指定位置的场景。
  • 在PL/SQL中查询表变量:需要用TABLE()函数将集合转换为可查询的关系型表,再通过游标循环读取数据并输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:42:40