Collections 从类型的表中选择值

Collections 从类型的表中选择值,collections,plsql,Collections,Plsql,我创建了一个定义表,T_DEFINITION 此表有两列:类别\u id和包含的\u服务\u列表。 /*有许多列的工作方式类似于INCLUDED_SERVICE_LIST logic,所以我写了其中一个来简化问题*/ 表格样本如下: CATEGORY_ID INCLUDED_SERVICE_LIST 18 24,37,86,102,125,144,226,285 24 12,25,33,49,52,55,58,63,69,70,80,90,1

我创建了一个定义表,T_DEFINITION 此表有两列:类别\u id和包含的\u服务\u列表。 /*有许多列的工作方式类似于INCLUDED_SERVICE_LIST logic,所以我写了其中一个来简化问题*/ 表格样本如下:

CATEGORY_ID    INCLUDED_SERVICE_LIST
18             24,37,86,102,125,144,226,285
24             12,25,33,49,52,55,58,63,69,70,80,90,107
价值观是这样的

在我的特别声明中;我想查询包含的\u服务\u列表列:

SELECT * 
FROM T_TRANSACTION A,T_DEFINITION B
WHERE A.SERVICE_ID IN (string.split(B.INCLUDED_SERVICE_LIST))             
我需要在INCLUDED_SERVICE_LIST列中拆分字符串,并在select语句中使用它。
string.split
是我的自定义拆分函数,它返回一个varchar2表

但是我不知道如何从varchar2的输出表中选择值。 你能帮我吗

谢谢

试试这个:

SELECT * 
  FROM T_TRANSACTION A,T_DEFINITION B
 WHERE A.SERVICE_ID IN (SELECT COLUMN_VALUE
                          FROM TABLE(string.split(B.INCLUDED_SERVICE_LIST)))
如果您的
string.split
被定义为返回一个嵌套表,则应该可以这样做

/* Type definition */
TYPE T_VARCHARS IS TABLE OF VARCHAR2(1000);

/* Function definition */
FUNCTION split(v VARCHAR2) RETURNING T_VARCHARS;
实际上,如果您使用的是oracle 11g,那么您可以创建包含嵌套表的列,而不是逗号连接数的长VARCHAR—下面是这种设计的一个示例

/* Create user type */
CREATE OR REPLACE TYPE T_NUMBERS AS TABLE OF NUMBER(30);

/* Create table with column holding a nested table */
CREATE TABLE T_DEFINITION (
    CATEGORY_ID NUMBER,
    INCLUDED_SERVICE_LIST T_NUMBERS
) NESTED TABLE INCLUDED_SERVICE_LIST STORED AS T_DEF_SERVICE_LIST;

T_事务和T_定义之间是否有其他连接?