2016-08-29 2 views
0

CASE 문 (함수에서 반환 된 값)의 표현식을 평가하고 조건 중 하나를 충족시키지 않으면 표현식 값 자체를 반환하고 싶습니다. 예를 들어Oracle CASE 문 - 표현식 값을 반환 하시겠습니까?

:

CASE UPDATE_RECORDS_F(party_number) 
WHEN 'ONE_RECORD_UPDATED' THEN RETURN 'OK'; 
WHEN 'MULTIPLE_RECORDS_UPDATED' THEN RETURN 'OK_MULTIPLE'; 
ELSE RETURN (expression value); 
END CASE; 

'다른 사람'의 경우는 예외가 발생하는 경우에 필요합니다. 반환 된 함수 값을 문자열에 할당하고 평가할 수는 있지만 오류 메시지의 길이를 알 수는 없습니다. 오히려 초과 될 수있는 길이를 설정하여 변수를 작성하는 대신 문자열 값을 즉시 처리합니다.

이 방법이 있습니까?

+0

질문에 대한 답변이 포함되어 있습니다. PL/SQL에서 값을 보존하는 방법은이를 변수에 할당하는 것입니다. 반환 값의 길이에 대해 걱정한다고 말하면됩니다. 그러나 당신은 당신 자신의 기능에서 그것을 돌려 주려고합니다. 함수의 반환 유형은 무엇입니까? VARCHAR2이면 로컬 변수에 VARCHAR2 (32767)의 최대 길이를 사용하십시오. –

+0

당신이 작성한 코드는 다음과 같이 단순화 될 수 있습니다 :'RETURN CASE UPDATE_RECORDS (...) WHEN ... THEN ... ..... END;'(경고 :이 경우에는'END ', 이제는 CASE 표현식을 사용하고 있기 때문에 'END CASE'가 아닙니다.). 3 대신에 하나의'RETURN' 문을 갖는 것이 더 좋습니다. – mathguy

답변

1

예외가 발생하면 반환 값은 정의되지 않으며 예외는 적절한 예외 처리기를 찾거나 클라이언트에 반환 할 때까지 코드를 통해 전파됩니다.

반환 값을 처리하려면 반환 값으로 정의 된 함수 (VARCHAR2 일 가능성이 있음)를 살펴보십시오. 그것의 최대 크기는 32767이므로 함수가 결코 그보다 큰 값을 반환하지 않는다는 것을 확신 할 수 있습니다.

0

내 마음에 가장 먼저 떠오르는 것은 UPDATE_RECORDS_F 함수를 수정하여 예외를 잡아 내고 미리 정의 된 문자열을 반환하여 case 문에서이를 감지 할 수 있도록하는 것입니다. 실제 예외 문자열을 지정할 필요가 없습니다. 함수가 예외 블록으로 떨어질 때 당신이 생각 나게하는 것을 반환하십시오.

0

당신이 말하는 예외는 실제로 문자열이라고 가정합니다. 그게 맞습니까?

어쨌든, 나는 문자의 길이가 2 백만을 초과 할 수있는 CLOB 유형의 변수에 함수 출력을 저장해야한다고 생각합니다. 이렇게하면 varchar 유형의 경우 그대로 출력을 4000 자로 제한하지 않습니다.

documentation on Oracle data types을 참조하십시오.

+0

CLOB를 사용하는 것이 좋습니다. 그러나 CASE 문을 포함 할 함수의 반환 형식에 따라 다릅니다. –