반응형
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.
모든 조건에 일치하도록 합니다.
자세한 내용:
- PL/SQL의 CASE에 대해 알아야 할 사항
- CASE에 대한 Oracle 문서
오래된 스레드는 알고 있지만, 그냥 이렇게 쓰면 되지 않을까요?
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
반응형
'programing' 카테고리의 다른 글
문자열 배열에 값이 포함되어 있는지 확인하고 포함되어 있으면 위치 가져오기 (0) | 2023.06.10 |
---|---|
UICollectionViewCell 내부의 UICollectionView -- 동적 높이? (0) | 2023.06.10 |
텍스트 파일의 URL이 주어지면 텍스트 파일의 내용을 읽는 가장 간단한 방법은 무엇입니까? (0) | 2023.06.10 |
파이어베이스에서 데이터를 구성하는 가장 좋은 방법은 무엇입니까? (0) | 2023.06.10 |
vuex, vue-router, pinia 등에 액세스하는 방법SSR 친화적인 방식으로 Vue 구성 요소 외부에? (0) | 2023.06.10 |