【问题标题】:Selecting values from table of type从类型表中选择值
【发布时间】:2012-09-30 04:31:04
【问题描述】:

我创建了一个定义表,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 的输出表中选择值。 你能帮帮我吗?

谢谢

【问题讨论】:

  • T_TRANSACTION 和 T_DEFINITION 之间还有其他连接吗?

标签: collections plsql


【解决方案1】:

试试这个:

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,您可以创建包含嵌套表的列,而不是逗号连接数字的长 varchars - 下面是这种设计的一个示例。

/* 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多