내 절차 나는 긴 문자열 p_LstKH을 분할 한 후 커서 c_dsKH에 넣고 싶습니다오라클 - 사용이 CLOB 매개 변수
CREATE OR REPLACE PROCEDURE my_procedure(res OUT SYS_REFCURSOR , p_LstKH CLOB)
AS
CURSOR c_dsKH
IS
SELECT TO_NUMBER(REGEXP_SUBSTR(p_LstKH,'[^,]+', 1, level)) value FROM dual
CONNECT BY REGEXP_SUBSTR(p_LstKH, '[^,]+', 1, level) IS NOT NULL;
BEGIN
...
END;
와 문에 의해 연결합니다. 예 : p_LstKH = '1, 2, ..., 10000'내가 그 절차를 실행할 때
c_dsKH.value
1
2
...
10000
그러나, 나는 "조작에 의한 연결을위한 메모리가 부족합니다"오류가 발생합니다. p_LstKH CLOB 매개 변수를 p_LstKH VARCHAR2로 바꾸려고 시도한 다음 다른 오류 "ORA-06502 : PL/SQL : 숫자 또는 값 오류 : 문자열 버퍼가 너무 작음"이 표시됩니다.
지금 어떻게해야합니까? 간단히 말해서 긴 문자열을 분리하고 싶습니다. 감사합니다.
정규 표현식은 최대 512 바이트 [여기 확인]을 포함 할 수 있습니다 (http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions131.htm) . 전역 임시 테이블을 작성하고 결과를 저장하는 프로 시저를 작성할 수 있습니다. 및 GT 테이블에서 쿼리. –
@simplify_life - * 패턴 *은 최대 512 바이트까지 가능합니다. 여기에있는 패턴은''[^,] + ''로, 이것은 단지 5입니다. 이것은 문제가되는 큰 입력 문자열에 대해 생성되는 레벨 수입니다. –
@ Alex..Correct .. 내 잘못 –