2012-09-30 32 views
0

我创建了一个定义表,T_DEFINITION 该表有2列:category_id和included_service_list。 /*有哪些正在像INCLUDED_SERVICE_LIST逻辑多列,所以我写了其中一人,使这个问题简单*/ 样品表的是:从类型表中选择值

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 

和值再这样下去。

在我的select语句中;我要查询INCLUDED_SERVICE_LIST柱:

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的输出表中选择值。 你能帮我吗?

感谢

+0

T_TRANSACTION和T_DEFINITION之间是否存在其他联接? – APC

回答

0

试试这个:

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,你可以创建列来保存嵌套表格,而不是使用逗号连接数字的长变量 - 下面是这种设计的一个例子。

/* 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; 
相关问题