2014-05-21 3 views
0

저는 일반적으로 SQL Server 개발자이지만 Oracle을 사용하는 시스템으로 작업하고 있습니다. 새 프로 시저를 만들고 런타임 오류가 발생합니다. 여기 저장 프로 시저의 컴파일 오류

CREATE OR REPLACE PROCEDURE CHK_LASTAPPTIME 
(
    LASTAPPTIME OUT VARCHAR2 
) 
IS 
    v_appappid varchar2(20) null; 
    v_lastapptime number null; 
BEGIN 
    select max(APPID) into v_appappid from applicationtable; 

    select trunc(v_lastapptime = (((sysdate - capturedate) * 24)) * 60) from applicationtable where APPID = v_appappid; 

    LASTAPPTIME := to_char(v_lastapptime); 

END CHK_LASTAPPTIME; 

내가 점점 오전 오류입니다 : 다음 절차는

SQL> var x varchar2; 
SQL> exec CHK_LASTAPPTIME(:x); 
BEGIN CHK_LASTAPPTIME(:x); END; 

* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character string buffer too small 
ORA-06512: at "CAPDEV.CHK_LASTAPPTIME", line 19 
ORA-06512: at line 1 

답변

0

메시지가 홀수, 또는 다른 코드를 표시했습니다 귀하의 proecedure 19 개 라인이없는 당신이 실제로하고있는 것. 당신이 보여준 것이 컴파일되지 않기 때문에 질문을 위해 자르려고했다고 가정하고, 실제 프로 시저가 유효하고 원하는 것을 수행한다고 가정합니다.

문제는 런타임 변수 선언에 있습니다. x의 크기를 지정하지 않았으므로 기본값을 사용합니다. 내 DB에서 SQL * 플러스에서 네 개 이상의 세 문자하지만 오류를 허용하도록 보인다 :

var x varchar2; 

exec :x := 'a'; 
PL/SQL procedure successfully completed. 
exec :x := 'ab'; 
PL/SQL procedure successfully completed. 
exec :x := 'abc'; 
PL/SQL procedure successfully completed. 
exec :x := 'abcd'; 
BEGIN :x := 'abcd'; END; 

* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character string buffer too small 
ORA-06512: at line 1 

제한은 아마도, 캐릭터 세트에 관련 될 수 있습니다. SQL Developer는 기본적으로 더 많은 것을 허용합니다. 어쨌든

, 당신의 변수의 크기를 지정합니다

var x varchar2(30); 
exec CHK_LASTAPPTIME(:x); 

당신은 반환 다음 절차에 숫자를 생성 할 것 같다 그 문자열로. 동일한 데이터 유형을 사용하면 조금 더 간단 해집니다.

+0

쿨! 네, 게시 목적으로 코드를 줄였습니다. 그리고 proc은 유효합니다. X의 크기를 지정하면 오류가 제거됩니다. 감사. – user3659837