我想实现一个过程,该过程采用由多行组成的字符串。我想逐行拆分字符串。然后我想解析和操纵字符串。我没有为此找到内置方法。我试图找到\ n字符的索引,但它没有用。我的代码如下所示:
create or replace
PROCEDURE VFROLLOUT_MULTIPLE(test_var VARCHAR2) AS
BEGIN
dbms_output.put_line(INSTR('test1
test2
test3
', '\n'));
commit;
END ;
它不起作用。怎么做以及如何逐行分割文本?
答案 0 :(得分:2)
请使用以下查询,
SELECT regexp_substr( 'test1
test2
test3
','[[:alnum:]]+',1,level) Result FROM dual connect by level<= regexp_count('test1
test2
test3
',chr(10));
答案 1 :(得分:1)
CHR()函数可能对您有所帮助。
请记住,不同的平台需要不同的换行符:
CHR(10)=&gt; LF,换行(unix)
CHR(13)=&gt; CR,回车(窗口,与换行一起)
您可以找到第一个LF出现的索引,如下所示:
BEGIN
dbms_output.put_line(instr('test1
test2
test3
'
,chr(10)
,1));
END;
此外,您可以用逗号替换新行并使用/调整此处讨论的一些技巧:Convert comma separated string to array in PL/SQL
答案 2 :(得分:0)
你怎么试试这个...
Create or replace PROCEDURE VFROLLOUT_MULTIPLE(test_var VARCHAR2 )
AS
NEW_TEST_VAR VARCHAR2(2000);
OUT_TEST_VAR VARCHAR2(2000);
STRING1 VARCHAR2(2000);
STRING2 VARCHAR2(2000);
STRING3 VARCHAR2(2000);
BEGIN
SELECT REGEXP_REPLACE(TEST_VAR,'[[:space:]]+',',') INTO NEW_TEST_VAR
FROM DUAL; --Replaces the line breaks/spaces with a delimeter
SELECT
SUBSTR(NEW_TEST_VAR,1,INSTR(NEW_TEST_VAR,',')-1) AS STRING1,
SUBSTR(NEW_TEST_VAR,INSTR(NEW_TEST_VAR,',',1,1)+1,
( (INSTR(NEW_TEST_VAR,',',1,2)+1)
-INSTR(NEW_TEST_VAR,',',1,1)-1 ) -1) AS STRING2 ,
SUBSTR( NEW_TEST_VAR,INSTR(NEW_TEST_VAR,',',1,2)+1 ) AS STRING3
INTO STRING1,STRING2,STRING3
FROM DUAL ; -- Using the delimeter the string is splitted
DBMS_OUTPUT.PUT_LINE('First Part : ' || STRING1);
DBMS_OUTPUT.PUT_LINE('Second Part : ' || STRING2);
DBMS_OUTPUT.PUT_LINE('Third Part : ' || STRING3);
--you can perform manipulations using these variables
OUT_TEST_VAR := STRING1 || ' ' || STRING2 || ' ' || STRING3 ;
DBMS_OUTPUT.PUT_LINE('Full String : ' || OUT_TEST_VAR );
END;
--Executing procedure