mssql에서는 안그러는데 오라클에서는 select 해서 결과 값을 변수 담을 때 select 되는 정보가 없는 No rows returned 일 경우는 에러를 발생한다. (select ~~~ into ~~~ 할 경우)

 

어떤 조건에 의해서 case를 정하고 그 경우에 맞춰서 에러코드를 설정하는 업무가 주어졌는데 변수에 select를 해서 담고 담은 내용에 비어 있으면 에러 코드 1, 그렇지 않으면 다른 변수를 확인하여 내용이 비어있으면 에러 코드 2 이런식의 작업이다.

 

이럴때 select 값이 없다보니 프로시저에서는 에러만 보여준다...ㅠ

 

이럴경우 NVL을 써도 아무 소용이 없다.

NVL은 데이터가 있을 경우 NULL 값을 다른 값으로 치환하는 것인데 NULL 데이터도 존재하지 않을 때는 아무 소용이 없는 것이다.

 

 

이럴경우 꼼수를 써서 해결이 가능하다.

꼼수로는 DUAL을 사용하는 것이다.

 

SELECT
    Z.SITE_CD, Z.EQP_NAME, TO_CHAR(Z.CAPA) || Z.CAPA_UNIT INTO V_SITE_CD, V_EQP_NAME, V_CAPA
  FROM (
          SELECT
              S.SITE_CD,   /* 현장 코드(건설 연동 현장코드) */
              G.EQP_NAME,  /* 장비명 */
              C.CAPA,      /* CAPA */
              (SELECT CASE WHEN P_LANGUAGE = 'ko' OR P_LANGUAGE IS NULL THEN CODE_NAME
                   WHEN P_LANGUAGE = 'en' THEN CODE_ENG_NAME
                END CODE_NAME
             FROM S_COMMON_CODE
             WHERE 1 = 1
             AND MASTER_CODE = 'G15'
             AND CODE = C.CAPA_UNIT) AS CAPA_UNIT
          FROM P_EQP_GENERAL G   /* 장비 */
              LEFT OUTER JOIN P_EQP_MODEL M ON  G.EQP_ID = M.EQP_ID   /* 모델 */
              LEFT OUTER JOIN P_EQP_CAPA C ON  G.EQP_ID = C.EQP_ID     /* CAPA */
              INNER JOIN S_SITE_INFO S ON  G.SITE_ID = S.SITE_ID       /* 현장 */
          WHERE P_SA_NO = G.SA_NO
      ) Z
      RIGHT OUTER JOIN DUAL ON 1=1;

 

요런식이 되겠다. 그러면 데이터가 없을 경우에도 변수에는 NULL 값이 들어간다.

'IT > 오라클' 카테고리의 다른 글

Oracle SQL Developer 프로지져 결과 보기  (0) 2018.05.15
트리 메뉴 검색  (0) 2018.05.04
테이블 생성 및 설명 쿼리  (0) 2018.05.02
테이블 칼럼, 타입, 설명 조회  (0) 2016.02.01

+ Recent posts

mssql에서는 안그러는데 오라클에서는 select 해서 결과 값을 변수 담을 때 select 되는 정보가 없는 No rows returned 일 경우는 에러를 발생한다. (select ~~~ into ~~~ 할 경우)

 

어떤 조건에 의해서 case를 정하고 그 경우에 맞춰서 에러코드를 설정하는 업무가 주어졌는데 변수에 select를 해서 담고 담은 내용에 비어 있으면 에러 코드 1, 그렇지 않으면 다른 변수를 확인하여 내용이 비어있으면 에러 코드 2 이런식의 작업이다.

 

이럴때 select 값이 없다보니 프로시저에서는 에러만 보여준다...ㅠ

 

이럴경우 NVL을 써도 아무 소용이 없다.

NVL은 데이터가 있을 경우 NULL 값을 다른 값으로 치환하는 것인데 NULL 데이터도 존재하지 않을 때는 아무 소용이 없는 것이다.

 

 

이럴경우 꼼수를 써서 해결이 가능하다.

꼼수로는 DUAL을 사용하는 것이다.

 

SELECT
    Z.SITE_CD, Z.EQP_NAME, TO_CHAR(Z.CAPA) || Z.CAPA_UNIT INTO V_SITE_CD, V_EQP_NAME, V_CAPA
  FROM (
          SELECT
              S.SITE_CD,   /* 현장 코드(건설 연동 현장코드) */
              G.EQP_NAME,  /* 장비명 */
              C.CAPA,      /* CAPA */
              (SELECT CASE WHEN P_LANGUAGE = 'ko' OR P_LANGUAGE IS NULL THEN CODE_NAME
                   WHEN P_LANGUAGE = 'en' THEN CODE_ENG_NAME
                END CODE_NAME
             FROM S_COMMON_CODE
             WHERE 1 = 1
             AND MASTER_CODE = 'G15'
             AND CODE = C.CAPA_UNIT) AS CAPA_UNIT
          FROM P_EQP_GENERAL G   /* 장비 */
              LEFT OUTER JOIN P_EQP_MODEL M ON  G.EQP_ID = M.EQP_ID   /* 모델 */
              LEFT OUTER JOIN P_EQP_CAPA C ON  G.EQP_ID = C.EQP_ID     /* CAPA */
              INNER JOIN S_SITE_INFO S ON  G.SITE_ID = S.SITE_ID       /* 현장 */
          WHERE P_SA_NO = G.SA_NO
      ) Z
      RIGHT OUTER JOIN DUAL ON 1=1;

 

요런식이 되겠다. 그러면 데이터가 없을 경우에도 변수에는 NULL 값이 들어간다.

'IT > 오라클' 카테고리의 다른 글

Oracle SQL Developer 프로지져 결과 보기  (0) 2018.05.15
트리 메뉴 검색  (0) 2018.05.04
테이블 생성 및 설명 쿼리  (0) 2018.05.02
테이블 칼럼, 타입, 설명 조회  (0) 2016.02.01

+ Recent posts