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

如何将Oracle表的单列多行数据传入表函数process_teilenummer

批量处理表数据的表函数调用方案

已创建的对象

首先是定义的表类型和处理函数:

create or replace TYPE t_process_teilenummer_tab AS TABLE OF VARCHAR2(4000);

create or replace FUNCTION process_teilenummer (
  Teilenummer IN CLOB 
 )
RETURN t_process_teilenummer_tab 
-- 内部实现逻辑:处理输入字符串并返回拆分后的字符串表

当前单值调用方式

目前可以传入逗号分隔的字符串字面量,获取拆分后的单列多行结果:

SELECT column_value
FROM   TABLE(
         process_teilenummer('abc , xyz' ) )

执行后返回2行数据:abc、xyz。

入参长度限制说明

最初选择CLOB作为入参是误以为支持超过4000字符的字符串字面量,但实际无论入参声明为VARCHAR2(4000)、VARCHAR2(30000)还是CLOB,字符串字面量本身都无法突破4000字符限制——不过这一点不影响从表中读取长数据传入函数(表中CLOB列可以存储远超过4000字符的内容)。

批量处理表数据的实现

要将另一张表(假设表名为source_table,目标列名为teilenummer_col,共5000行)的单列数据传入函数并得到处理后的结果集,可采用以下两种方式:

方式1:使用APPLY语法(Oracle 12c+)

SELECT pt.column_value
FROM   source_table st
CROSS APPLY TABLE(process_teilenummer(st.teilenummer_col)) pt;
  • CROSS APPLY:仅返回原表中能通过函数生成结果的行对应的处理数据
  • 若需保留原表所有行(包括函数处理后无结果的行),替换为OUTER APPLY即可

方式2:传统关联语法(兼容低版本Oracle)

SELECT pt.column_value
FROM   source_table st,
       TABLE(process_teilenummer(st.teilenummer_col)) pt;

这种写法等价于CROSS JOIN,仅返回有处理结果的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:36:16