Collections 从类型的表中选择值
我创建了一个定义表,T_DEFINITION 此表有两列:类别\u id和包含的\u服务\u列表。 /*有许多列的工作方式类似于INCLUDED_SERVICE_LIST logic,所以我写了其中一个来简化问题*/ 表格样本如下: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
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_定义之间是否有其他连接?