2010-08-18 2 views
1

다음과 같은 Oracle 기능이 있습니다. 나는 SQL-개발이를 실행할 때 함수에서 DBMS_OUTPUT.PUT_LINE(FINAL_RESULT) 라인이 출력 창에서 예상되는 출력을 인쇄하고 그러나 오류를ORA-06502 : PL/SQL : 숫자 또는 값 오류 : 문자열 버퍼가 너무 작음 오류

ORA-06502: PL/SQL: numeric or value error: character string buffer too small error.

을 제공합니다.

아무도 나를 도울 수 있습니까 ??

create or replace 
FUNCTION AVERAGE_WORKFORCE(PERIOD in varchar2, YR in varchar2) RETURN CLOB AS 
FINAL_RESULT CLOB:=null; 
STRING_QUERY_TEXT CLOB:=null; 
OUTPUT_RESULT CLOB:=null; 
BEGIN 
    FINAL_RESULT:='<FINAL_RESULT><HEADER><NAME> </NAME> <NAME>SENIOR DIRECTOR</NAME> <NAME>DIRECTOR</NAME> <NAME>EXECUTIVE</NAME> <NAME>MANAGER</NAME><NAME>CASHIER</NAME><NAME>EMPLOYEE</NAME></HEADER>';  
    STRING_QUERY_TEXT:='SELECT XMLElement("tuple",XMLElement("DESC",''Average number of registered employees''), XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''SENIOR DIRECTOR'')), XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''DIRECTOR'')), XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''MANAGER'')), XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''EXECUTIVE'')), XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''CASHIER'')), XMLElement("PERMANENT_EMP",GET_COUNT_AVERAGE_WORKFORCE('''||PERIOD||''','''||YR||''',''EMPLOYEE''))) FROM DUAL';  
    EXECUTE_QUERY_RETURN_RESULT(STRING_QUERY_TEXT,OUTPUT_RESULT);  
    FINAL_RESULT:=FINAL_RESULT||''||OUTPUT_RESULT; 
    FINAL_RESULT:=FINAL_RESULT||''||'</FINAL_RESULT>'; 
    DBMS_OUTPUT.PUT_LINE(FINAL_RESULT); 
    RETURN FINAL_RESULT; 
END AVERAGE_WORKFORCE; 
+0

어떻게 함수를 호출하고 있습니까? –

+0

이 함수는 sql-developer에서 직접 실행 중입니다. – Andromeda

+0

EXECUTE_QUERY_RETURN_RESULT 프로 시저의 사양은 무엇입니까? –

답변

1

시도해보십시오.이 DBMS_OUTPUT.ENABLE (200000);

+0

OP가 콘솔에서 출력을 받고 DBMS_OUTPUT 제한을 지정하면 -06502가 아닌 자체 예외가 발생합니다. 나는 우리가 지금 대답을 가지고 있다고 생각한다. – JulesLt

0

가장 쉬운 방법은 줄 바꿈을 삽입하여 줄 길이를 255 자로 제한하는 것입니다. this을 참조하십시오.

6

Alex와 Tony (분명히 똑같은 생각을 한 사람)에게 사과합니다.

코드에 예상되는 출력이 표시되어 DBMS_OUTPUT 행이 성공해야합니다.

DBMS_OUTPUT.PUT_LINE(FINAL_RESULT); 

QED이 시점 이후에는 예외가 발생합니다. 이 함수에는 한 줄 더 있습니다. 결과는 그것이 CLOB하지 않습니다 즉, (SQL Developer에서 호출 코드에 정의 된 변수에 대한 너무 큰하지만, 문자열이 너무 작 -

RETURN FINAL_RESULT; 

추측 알렉스 언급으로 문제가 있다는 것입니다 결과에 대한).

생성 된 코드 인 경우 SQL Developer 및 CLOB 기능의 버그 일 수 있습니다.

대신 DUAL에서 SELECT 함수를 사용해 보았습니까?

+0

사과 접수; 반환 값으로 수행 된 작업을 모호하게 확인했는지 확실하지 않은 경우

+0

도구 생성 코드가 실패한 경우 특히 오라클 자체 도구 인 경우 명확하지 않을 수 있습니다! – JulesLt

관련 문제