2014-06-06 5 views
1

전문가 ...SQL 쿼리에서 디코드 사용

null 조건을 포함하도록 간단한 쿼리를 수정하려고합니다.

where 절에 "IS NOT NULL"을 사용할 수 있으며 레코드를 무시하지만 다시는 가장 좋은 방법은 아닙니다. 올바른 방법으로 문제를 해결하고 싶습니다.

아래의 모든 프로세스를 나열하고 "1234 @ xzy", "1234 @ abc"를 JDBC로 바꿉니다. 이 디코드는 목록에 null이 있으면 스크립트에서 제대로 작동하지 않습니다.

질문 : 1. 현재 디코드를 수정하여 null을 NA로 바꾸는 것이 가능합니까?

Query in oracle: 

SELECT osuser, machine, 
     DECODE (process, '1234', 'JDBC', substr(process, 1, instr(process || '@','@')-1)) "PID" 
FROM v$session 
WHERE username IS NOT NULL; 

Expected Result: 
=============== 
4567  
78960  
4575  
JDBC  
JDBC  
NA  
9658 

Process list: 
============= 
4567  
78960  
4575  
[email protected]  
[email protected]  
    (null) 
9658 

답변

1

당신은 nvl 표정으로 decode 표현을 포장 수 : 감사합니다 ...

SELECT osuser, machine, 
     NVL(DECODE (process, 
        '1234', 'JDBC', 
        substr(process, 1, instr(process || '@','@')-1)), 
      'NA') "PID" 
FROM v$session 
WHERE username IS NOT NULL; 
+0

이 위대한 작품을 내가 응답 시간에 감동했다 ... 나는 NVL/NVL2와 함께 연주하지만 didn를했다 디코딩과 합치는 것을 생각하지 마라. – homer