--함수 만들기 CREATE OR REPLACE FUNCTION GET_CC(text IN VARCHAR2, idx IN VARCHAR2, len IN INTEGER) RETURN VARCHAR2 IS RESULT VARCHAR2(100); BEGIN SELECT SUBSTR(text, idx, len) INTO RESULT FROM DUAL; RETURN RESULT; END; --사용 WITH T AS ( SELECT 'A1B2C3D4E5F6G7H8I9J10K11L12M13N14O15P16Q17R18S19T20U21V22W23X24Y25Z26' AS text FROM DUAL ) SELECT GET_CC(text, 5, 1) || --5번째 위치 문자 1개 GET_CC(text, 23, 1) || --23번째 위치 문자 1개 GET_CC(text, 52, 1) || --52번째 위치 문자 1개 GET_CC(text, 62, 3) --62번째 위치 문자 3개 FROM T
-- Select 없이 순수 코딩으로... CREATE OR REPLACE FUNCTION f_test ( i_str VARCHAR2 , i_par VARCHAR2 ) RETURN VARCHAR2 IS v_par VARCHAR2(4000) := i_par||','; v_pos NUMBER(3); o_str VARCHAR2(300); BEGIN WHILE INSTR(v_par, ',') > 0 LOOP v_pos := SUBSTR(v_par, 1, INSTR(v_par, ',') - 1); o_str := o_str || SUBSTR(i_str, v_pos, 1); v_par := SUBSTR(v_par, INSTR(v_par, ',') + 1); END LOOP; RETURN o_str; END; / SELECT f_test('abcdefghijklmn', '1,3,5') v FROM dual;