您好我有一个逗号分隔的GUI ID,我需要传递给程序,我将解析。下面的程序工作到30个字符长度,我的GUI ID是36个字符长度,所以它给出错误。有人可以帮帮我吗 我的逗号SeparatedString ='“06b7930e-293f-6604-e053-2176a8c09440”,“06b7930e-293f-6604-e053-2176a8c09440”';
我需要将commaSeparatedString传递给过程并获取o / p as 06b7930e-293f-6604-e053-2176a8c09440和 06b7930e-293F-6604-e053-2176a8c09440 请改变我的程序。提前致谢
create or replace
procedure PROC_ASSIGN_SUBSETS_TESTING(
subsetIdString in varchar2,
userId in varchar2,
type in varchar2
) is
subsetIdArray STR_ARRAY;
subsetId varchar(255);
shopCount number;
shopId varchar(255);
userAccessId varchar(255);
ltab_lname dbms_utility.lname_array;
ln_len BINARY_INTEGER;
BEGIN
dbms_utility.comma_to_table(list =>subsetIdString
,tablen => ln_len
,tab => ltab_lname);
FOR i IN 1 .. ln_len LOOP
dbms_output.put_line('element ' || i || ' is ' || replace(ltab_lname(i),'"'));
END LOOP;
END;
答案 0 :(得分:2)
类型lname_array
只能存储多达4000个字符,
name_array
限制为30个字符,因此它应该适用于该情况,因为代码仅使用lname数组。
lname_array TYPE lname_array IS TABLE OF VARCHAR2(4000) index by BINARY_INTEGER
;
Long NAME列表应存储在此处,它包含完全限定的属性名称。
name_array TYPE name_array IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
NAME列表应存储在此处。
此外,您可以使用以下查询转换',而不是调用dbms_utility.comma_to_table。表格的分离值
select replace(
regexp_substr('"06b7930e-293f-6604-e053-2176a8c09440",
"06b7930e-293f-6604-e053-2176a8c09440"','[^,]+',1,level),'"')
from dual
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE('"06b7930e-293f-6604-e053-2176a8c09440",
"06b7930e-293f-6604-e053-2176a8c09440"' , '[^,]+')) + 1;
答案 1 :(得分:1)
您可以使用以下技巧:
REGEXP_SUBSTR方法
SQL> WITH DATA AS(
2 SELECT q'["06b7930e-293f-6604-e053-2176a8c09440","06b7930e-293f-6604-e053-2176a8c09440"]' str
3 FROM dual)
4 SELECT regexp_substr(str,'[^,]+',1,level) str
5 FROM DATA
6 CONNECT BY regexp_substr(str, '[^,]+', 1, level) IS NOT NULL
7 /
STR
-----------------------------------------------------------------------------
"06b7930e-293f-6604-e053-2176a8c09440"
"06b7930e-293f-6604-e053-2176a8c09440"
SQL>
我在getting "comma-separated list near 'xx.yy' invalid" with dbms_utility.comma_to_table使用其他方法回答了类似问题,例如 XML,表函数,流水线函数。