基于逗号分隔的字符串 -oracle 构建数组
Posted
技术标签:
【中文标题】基于逗号分隔的字符串 -oracle 构建数组【英文标题】:Building an array based on comma seperated string -oracle 【发布时间】:2013-10-04 06:48:58 【问题描述】:我想建立一个基于逗号分隔字符串的数组。但不能再进一步了。
DECLARE
type rol_type is record
(role MMSTROLEHDR.ROLECODE%TYPE) ;
array_rolecode rol_type;
vl_prmval VARCHAR2 (4000) := '2,3,4';
vl_pos NUMBER;
BEGIN
WHILE (INSTR (vl_prmval, ',') > 0)
LOOP
vl_pos := INSTR (vl_prmval, ',');
--vl_cnt := vl_cnt + 1;
array_rolecode.role := SUBSTR (vl_prmval, 1, vl_pos - 1);
vl_prmval := SUBSTR (vl_prmval, vl_pos + 1);
END LOOP;
FOR j IN array_rolecode.first .. array_rolecode.last
LOOP
DBMS_OUTPUT.put_line (array_rolecode.role);
END LOOP;
END;
END;
【问题讨论】:
重复Convert comma separated string to array in PL/SQL 【参考方案1】:您的数组必须声明为数组,而不是记录。看来,循环有错误,导致字符串的最后一部分没有插入数组,你应该检查一下。但是,这是工作脚本:
DECLARE
type rol_type is record
(role MMSTROLEHDR.ROLECODE%TYPE) ;
type rol_arr is table of rol_type
index by binary_integer;
--array_rolecode rol_type;
array_rolecode rol_arr;
vl_prmval VARCHAR2 (4000) := '2,3,4';
vl_pos NUMBER := 0;
BEGIN
WHILE (INSTR (vl_prmval, ',') > 0)
LOOP
vl_pos := INSTR (vl_prmval, ',');
--vl_cnt := vl_cnt + 1;
array_rolecode(NVL(array_rolecode.last+1,1)).role := SUBSTR (vl_prmval, 1, vl_pos - 1);
vl_prmval := SUBSTR (vl_prmval, vl_pos + 1);
END LOOP;
FOR j IN array_rolecode.first .. array_rolecode.last
LOOP
DBMS_OUTPUT.put_line (array_rolecode(j).role);
END LOOP;
END;
【讨论】:
以上是关于基于逗号分隔的字符串 -oracle 构建数组的主要内容,如果未能解决你的问题,请参考以下文章
用逗号分隔数组,但是当涉及到最后一个字符串时,删除逗号[重复]