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
相关产品推荐
相关产品推荐

