Oracle如何设置TABLE OF NUMBER类型的自定义返回字段名替代column_value
你设想的直接给number类型嵌套表指定字段名的语法在Oracle中不支持。你之前定义的TableOfNumber是基础数值类型的嵌套表,本质是单值集合,Oracle默认只会给这类集合的查询结果分配固定字段名column_value,无法在定义基础类型集合时直接指定自定义字段名。
要实现自定义返回字段名为ITid的需求,可以通过自定义对象类型的方案实现,操作步骤如下:
- 第一步:创建包含目标字段的自定义对象类型
create or replace type NumObj as object (ITid number);
- 第二步:基于上述对象类型重新定义集合类型
create or replace type TableOfNumber as table of NumObj;
- 第三步:调整
GetItems函数的实现逻辑,查询时将结果字段封装为对象实例
create or replace function GetItems() return TableOfNumber as Res TableOfNumber; sqlstr varchar2(500); begin -- 此处为测试语句 sqlstr:= 'select NumObj(swid) from ITEMS i' ; dbms_output.put_line (sqlstr); EXECUTE IMMEDIATE sqlstr BULK COLLECT INTO Res ; return(Res); end ;
- 第四步:调用验证
如果你使用的是Oracle 12c及以上版本,可以直接用你期望的语法查询:
select ITid from GetItems();
如果是更低版本的Oracle,需要额外套一层table()函数:
select ITid from table(GetItems());
内容的提问来源于stack exchange,提问作者خالد بشير
相关产品推荐
相关产品推荐

