遇到了一个有趣的工具我不知道。 dbms_utility.comma_to_table。 http://mohsoracle.blogspot.com/2010/04/oracle-breaking-comma-separated-string.html
所以,如果你想用它来从分隔字符串返回一个sys ref游标,可能类似。
/* Formatted on 10/28/2016 9:42:52 AM (QP5 v5.256.13226.35510) */
CREATE OR REPLACE PROCEDURE myproc (v_cur OUT SYS_REFCURSOR)
IS
lv_Str_List VARCHAR2 (1000)
:= 'Firstname, Bob, Surname, Smith, Address, 101 High Street, City, London, Country, UK';
lb_cnt BINARY_INTEGER;
la_Tab_Str DBMS_UTILITY.UNCL_ARRAY;
BEGIN
lv_Str_List := '"' || REPLACE (lv_Str_List, ',', '","') || '"';
-- parse the string into comma separated table
DBMS_UTILITY.COMMA_TO_TABLE (lv_Str_List, lb_cnt, la_Tab_Str);
FOR i IN 1 .. la_Tab_Str.COUNT
LOOP
-- display substring
DBMS_OUTPUT.PUT_LINE (TRIM (la_Tab_Str (i)));
END LOOP;
OPEN v_cur FOR
SELECT *
FROM (SELECT REPLACE (TRIM (la_Tab_Str (2)), '"', '') AS Firstname,
REPLACE (TRIM (la_Tab_Str (4)), '"', '') AS Surname,
REPLACE (TRIM (la_Tab_Str (6)), '"', '') AS Address,
REPLACE (TRIM (la_Tab_Str (8)), '"', '') AS City,
REPLACE (TRIM (la_Tab_Str (10)), '"', '') AS Country
FROM DUAL) t;
END;
我硬编码的字符串,但它可以作为一个变量进来,然后用逗号代替你的分号。
当我在蟾蜍运行以下测试它。
DECLARE
V_CUR SYS_REFCURSOR;
BEGIN
V_CUR := NULL;
MYPROC (V_CUR);
:to_grid := V_CUR;
COMMIT;
END;
我
FIRSTNAME SURNAME ADDRESS CITY COUNTRY
Bob Smith 101 High Street London UK
你需要转动;这取决于你使用的是哪个版本的Oracle。但是为什么你想使用PL/SQL呢? –
我刚刚更新了我的问题@Alex希望它能让事情更清晰 –
什么是您的oracle版本? – Kacper