我创建了一个定义表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
和值继续这样。
在我的选择陈述中;我想查询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 :(得分: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;