2012-09-30 34 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; 
相關問題