당신은 당신의 쿼리를 인라인 뷰를 사용할 수 있습니다
WITH t AS (
SELECT 'a,b,c,d,e' AS txt FROM dual
)
SELECT extra_processing(value)
FROM (
SELECT CAST(REGEXP_SUBSTR (txt, '[^,]+', 1, level) AS CHAR(12)) AS value
FROM t
CONNECT BY level <= LENGTH(regexp_replace(txt,'[^,]*'))+1
);
을이이 PL/SQL로 태그되어 있기 때문에 - 모든 SQL 사용하는 이유 :
오라클 설치 :
을 구분 기호에 문자열을 분할하는 작은 도우미 함수 :
CREATE OR REPLACE FUNCTION split_String(
i_str IN VARCHAR2,
i_delim IN VARCHAR2 DEFAULT ','
) RETURN SYS.ODCIVARCHAR2LIST DETERMINISTIC
AS
p_result SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
p_start NUMBER(5) := 1;
p_end NUMBER(5);
c_len CONSTANT NUMBER(5) := LENGTH(i_str);
c_ld CONSTANT NUMBER(5) := LENGTH(i_delim);
BEGIN
IF c_len > 0 THEN
p_end := INSTR(i_str, i_delim, p_start);
WHILE p_end > 0 LOOP
p_result.EXTEND;
p_result(p_result.COUNT) := SUBSTR(i_str, p_start, p_end - p_start);
p_start := p_end + c_ld;
p_end := INSTR(i_str, i_delim, p_start);
END LOOP;
IF p_start <= c_len + 1 THEN
p_result.EXTEND;
p_result(p_result.COUNT) := SUBSTR(i_str, p_start, c_len - p_start + 1);
END IF;
END IF;
RETURN p_result;
END;
/
(210)
코드 :
DECLARE
list SYS.ODCIVARCHAR2LIST := split_String('a,b,c,d,e');
BEGIN
FOR i IN 1 .. list.LAST LOOP
-- do your extra processing
END LOOP;
END;
/
하거나 SQL에서 그것을 할 만 할 수
SELECT extra_processing(COLUMN_VALUE)
FROM TABLE(split_String('a,b,c,d,e'))
(참고 :. COLUMN_VALUE
는 오라클이 TABLE
운영자에 의해 생성 된 값에 제공하는 열 이름)
FOR 루프를 사용해 보셨습니까? –
다른 것과 마찬가지로 결과 세트를 반복 할 수 있습니다. 왜 그걸 감당할 수 없다고 생각하니? 어떤 이유로 작동하지 않는 코드가있는 경우 오류가 발생한 것과 함께 질문에 추가하십시오. –