programing

PL/SQL에서 CASE 문을 실행하는 동안 ORA-06592: CASE를 찾을 수 없는 이유는 무엇입니까?

muds 2023. 6. 10. 09:48
반응형

PL/SQL에서 CASE 문을 실행하는 동안 ORA-06592: CASE를 찾을 수 없는 이유는 무엇입니까?

PL/SQL에 다음과 같은 CASE가 있습니다.

        CASE
            WHEN v_line_item.custom_segment = 'CND1' THEN
                v_current_col := v_col_lcy_tps;
            WHEN v_line_item.custom_segment = 'CND2' THEN
                v_current_col := v_col_lcy_ib;
            WHEN v_line_item.custom_segment = 'CND3' THEN
                v_current_col := v_col_lcy_gm;
            WHEN v_line_item.custom_segment = 'CND4' THEN
                v_current_col := v_col_lcy_pb;
            WHEN v_line_item.custom_segment = 'CND5' THEN
                v_current_col := v_col_lcy_bb;
        END CASE;

코드는 정상적으로 컴파일되지만 저장된 proc로 실행하면 다음 오류가 발생합니다.

ORA-06592: CASE 문을 실행하는 동안 CASE를 찾을 수 없습니다.

그래서 CASE를 제거하면 저장된 프로시저가 컴파일되지 않습니다.제가 손에 넣을 수 있는 유일한 예는 선택 문에 CASE를 사용하고, 선택 문에 사용하고 싶지 않습니다. 여러 개의 IF NETHERE 문 없이 변수를 설정하고 싶습니다.

를 사용하는 경우CASE진술 - 아래의 목록CASE를 사용하여 수행한 것처럼 명시적으로 발생할 수 있는 모든 조건과 일치해야 합니다.

WHEN v_line_item.custom_segment = 'CND1' THEN
            v_current_col := v_col_lcy_tps;
WHEN v_line_item.custom_segment = 'CND2' THEN

또는 를 사용하여ELSE

코드가 다음과 같은 상황에 도달했습니다.v_line_item.custom_segment지정된 항목과 일치하지 않습니다.CASE시나리오에 따라 Oracle은 이 예외를 제기합니다.

캐치올 조건을 추가할 수 있습니다.

ELSE
   -- do some work here, raise an exception or log it.

모든 조건에 일치하도록 합니다.

자세한 내용:

오래된 스레드는 알고 있지만, 그냥 이렇게 쓰면 되지 않을까요?

v_current_col :=
    case v_line_item.custom_segment
        when 'CND1' then v_col_lcy_tps
        when 'CND2' then v_col_lcy_ib
        when 'CND3' then v_col_lcy_gm
        when 'CND4' then v_col_lcy_pb
        when 'CND5' then v_col_lcy_bb
    end;

더 간결하고 읽기 쉬우며 ORA-06592 오류가 발생하지 않습니다.

언급URL : https://stackoverflow.com/questions/7226648/why-am-i-getting-ora-06592-case-not-found-while-executing-case-statement-in-pl

반응형