2016-09-15 5 views
2

십진수 정밀도를 업데이트하기 전에 값이 NULL인지 확인하는 Oracle 디코드가 있습니다. 문제는 price_precision 열의 값이 null이 아니며 디코드가 d.price 값으로 계속 이동하지만 기본값으로 이동해야하는 경우입니다. 내가 선택 문에 대한 대가로 볼 수 있기 때문에, 가격 _Precision 열에서 비 NULL 데이터가 아는 사실Oracle DECODE가 작동하지 않습니다.

DECODE(d.PRICE_PRECISION, NULL, d.price,TO_CHAR(DECODE(d.price,NULL, '', d.price), CONCAT('9999990',RPAD('D', d.PRICE_PRECISION+1,'9')))) price 

: 여기에 디코드하는 코드의 라인입니다. 내 디코드에 문제가 있습니까? 디코딩이 기본 명령문으로 넘어 가지 않는 이유는 무엇입니까?

+0

d.price는 어떤 데이터 유형입니까? 'DEC '(d.PRICE_PRECISION, NULL, d.price, TO_CHAR (d.PRICE_PRECISION, NULL, d.price, DEC.PRICE_PRECISION, NULL, d.price)를 선택하십시오. 이중 선택 UNIT ALL 에서 SELECT 10 AS PRICE_PRECISION,'2 'PRICE에서 SELECT NULL은 PRICE_PRECISION을 선택하십시오. DECODE (d.price, NULL, '', d.price), CONCAT ('9999990', RPAD ('D', d.PRICE_PRECISION + 1, '9')))) 가격 d에서'작동하는 것 같습니다. if d.price는 varchar2 데이터입니다. – xQbert

답변

1

암시 적 변환이 발생했습니다. Oracle docs에서이

DECODE(d.PRICE_PRECISION, NULL, to_char(d.price), TO_CHAR.... 

을 고려

오라클은 자동으로 expr과 비교하기 전에 먼저 search 값의 데이터 형식에 대한 각 search 값을 변환합니다. Oracle 은 반환 값을 첫 번째 result과 동일한 데이터 유형으로 자동 변환합니다.

관련 문제