2014-05-11 7 views
0
내가 PL/SQL을 사용하여 배열에 VARCHAR를 변환해야합니다,하지만 난 SUBSTR 함수를 사용할 때, 난이 오류가 얻을

:오라클 PL/SQL의 SUBSTR 오류

오류 보고서를 - ORA-06550를 : 라인 (12) , 열 3 : PLS-00330 : 형식 이름 또는 하위 형식 이름을 잘못 사용했습니다. ORA-06550 : 12 행 3 열 : PL/SQL : 문이 무시되었습니다. 06550. 00000 - "행 % s, 열 % s : n % s " * 원인 : 일반적으로 PL/SQL 컴파일 오류입니다.

이 내 코드입니다 :

SET SERVEROUTPUT ON; 
DECLARE 
    v_string varchar2(20) := 'hello'; 
    type array_string is varray(5) of varchar2(10); 
    v_length number; 
    cnt number; 
    v_char char(1); 
BEGIN 
    v_length := length(v_string); 
    while (cnt < v_length) 
    loop 
    v_char := SUBSTR(v_string, cnt, 1); 
    array_string(cnt) := v_char; 
    cnt := cnt + 1; 
    end loop; 
END; 

내가 (부분적으로) 'SUBSTR'를 입력 오른쪽은 (SQLERRM, 1, 64) SUBSTR하는 자동 완성 그래서 명령을 알아야 할 때?

무엇이 잘못 되었나요?

관련,

답변

1

PL/SQL에서 아주 새로운 메신저 당신은 substr에서 사용하기 전에 변수 cnt를 초기화해야합니다.
array_string(cnt)에 형식 이름 대신 변수 이름을 사용해야합니다.
새 값을 쓰기 전에 extend Varray를 작성해야합니다. 오라클 환경에서

+0

고마워요! 내가 substr에 대한 또 다른 오류를 가지고있는 한 작업했기 때문에 나는 거기 모두가 아니라, 그 길에있다! 이제 내 코드입니다 : 편집 : 어쩌면 내가 대답을 코드에 넣어야하므로 더 잘 감독 할 수 있습니다. 새로운 오류 : 아래 첨자 – user3626025

+0

아래 첨자는 '1'로 초기화해야합니다. –

0

는 varrays의 시작 인덱스는 항상 그래서 루프의 처음 실행, 동안

a_string(cnt) := v_char; 

CNT가 0 인 귀하의 cnt는 0부터 시작 1.

입니다 .

1과

초기화 CNT 및

while (cnt < 5) 
에 대한 루프를 실행

그러면 오류가 제거됩니다.

+0

thx, 바로 사용하십시오! – user3626025