将逗号分隔值存储到表中

时间:2014-05-15 19:16:53

标签: database plsql

我有一个应用程序,其中用户以逗号分隔格式从UI输入输入,我必须捕获这些值并以记录的形式插入数据库表。 例如,用户输入('p1,p2,p3,p4'),它将作为

存储在表中
ID   Value
1    p1
2    p2
3    p3
4    p4

我需要使用关联数组来实现它吗?

1 个答案:

答案 0 :(得分:0)

您可以创建一种varchar2(100)

的数组
CREATE OR REPLACE TYPE t_my_list AS TABLE OF VARCHAR2(100);

然后创建一个函数,从输入的p_list字符串'valsepvalsepvalsep'c2t为char到表)返回此类型:

CREATE OR REPLACE
FUNCTION c2t(p_sep in Varchar2, p_list IN VARCHAR2)
  RETURN t_my_list
AS
  l_string VARCHAR2(32767) := p_list || p_sep;
  l_sep_index PLS_INTEGER;
  l_index PLS_INTEGER := 1;
  l_tab t_my_list     := t_my_list();
BEGIN
  LOOP
    l_sep_index := INSTR(l_string, p_sep, l_index);
    EXIT
  WHEN l_sep_index = 0;
    l_tab.EXTEND;
    l_tab(l_tab.COUNT) := TRIM(SUBSTR(l_string,l_index,l_sep_index - l_index));
    l_index            := l_sep_index + 1;
  END LOOP;
  RETURN l_tab;
END c2t;
/

以下是您如何致电上述内容:

select cto_table(',', 'p1,p2,p3') from dual;

这会给你一个“收藏”。你使用内置的table(..)函数创建一个表格,如下所示:

select rownum, column_value from table(c2t(',', 'p1,p2,p3')) ;