함수 리턴 값이 에러가 나는데 원인을 모르겠습니다. 0 3 2,551

by Vampirejk [PL/SQL] [2013.06.08 16:04:07]


함수의 원형은 아래와 같습니다.

실행 단계에서는 에러가 나지 않는데

완료 후 리턴을 하면 토드가 뻗어버리거나 리턴 데이터의 버퍼 길이... 라는 문구가 나오면서 에러가 납니다.



CREATE OR REPLACE FUNCTION RMSPTC."FC_GET_RNUMBER_NO"
RETURN CHAR 
IS
 V_RNUMBER CHAR(10);
BEGIN
 
 SELECT TRIM(CONCAT( LPAD(TO_CHAR(SYSDATE, 'YYMMDD'), 7, 'R') ,TRIM(TO_CHAR(SUBSTR(R_NUMBERING,8,3)+ 1,'000'))))
 INTO V_RNUMBER
 FROM (
  SELECT R_NUMBERING, RANK() OVER(ORDER BY R_NUMBERING DESC) AS NUM 
  FROM IF_RMS_ERP_TTM 
  )
 WHERE NUM = 1;
 
 DBMS_OUTPUT.PUT_LINE(V_RNUMBER); 
 
 RETURN V_RNUMBER;
 
 EXCEPTION
 WHEN NO_DATA_FOUND THEN
 NULL;
 WHEN OTHERS THEN
 RAISE;
 
 
END FC_GET_RNUMBER_NO;

by 야신 [2013.06.08 22:54:06]
V_RNUMBER 변수의 자리수가 작아서 나는 에러네요.

V_RNUMBER(10) => V_RNUMBER(1000) 이렇게 변경하시면 에러가 안날겁니다.

10자리가 맞는데 에러가 나는 것이라면 데이타가 큰 값들이 있어서 나는 겁니다.
아래 펑션을 수행해 보시면 동일한 에러가 나네요.


CREATE OR REPLACE FUNCTION "FC_GET_RNUMBER_NO2"
RETURN CHAR 
IS
 V_RNUMBER CHAR(10); 
BEGIN
  
 SELECT TRIM(CONCAT( LPAD(TO_CHAR(SYSDATE, 'YYMMDD'), 7, 'R') ,TRIM(TO_CHAR(SUBSTR(R_NUMBERING,8,3)+ 1,'000')))) 
 INTO V_RNUMBER 
 FROM ( 
 SELECT R_NUMBERING, RANK() OVER(ORDER BY R_NUMBERING DESC) AS NUM 
 FROM ( select 99999999999999 R_NUMBERING
      from dual )
 ) 
 WHERE NUM = 1; 
  
 DBMS_OUTPUT.PUT_LINE(V_RNUMBER); 
  
 RETURN V_RNUMBER; 
  
 EXCEPTION 
 WHEN NO_DATA_FOUND THEN
 NULL; 
 WHEN OTHERS THEN
 RAISE; 
  
  
END FC_GET_RNUMBER_NO2;

by 부쉬맨 [2013.06.10 10:18:05]
char형태는 문자열 길이를 길게해줫을때
생기는 문자열지정한 값에 따라 빈공간이 들어가므로..

varchar2형태로 변경을 한다든지..

마지막 return values의 값에 Trim을 걸어서 
데이터만 들어갈수있도록 처리하는게 좋습니다.

by 필상 [2013.06.10 10:15:36]
SELECT  TRIM(TO_CHAR(SUBSTR('IIIIIII998',8,3)+ 1,'000')), TRIM(TO_CHAR(SUBSTR('IIIIIII999',8,3)+ 1,'000'))
  FROM DUAL;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입