개발Story
Published 2020. 2. 9. 14:48
Oracle 함수만들기. DB/oracle

프로젝트 진행 중  Oracle을 이용해 함수를 만들어보았다.

 

일단 oracle함수의 제약조건은 하나의 값만 리턴이 가능하다는 것이다.

 

찾아보면 여러값을 리턴 가능할려나..? 일단 하나의 리턴값만 하면 되었기에 구현을 해보았다.

 

일단 문법은

 

 

CREATE OR REPLACE FUNCTION 함수이름 (파라미터)

 

RETURN 리턴타입 IS  변수명 리턴타입;

 

BEGIN

변수명 := null;

 

SELECT 리턴해주고싶은컬럼

INTO 변수명 

FROM

WHERE ...... ;

 

RETURN 변수명;

 

END;

 

상황에 따라서 IF문을 추가 할 수 있다.

 

주의할 것! 파라미터 컬럼이름이랑  db컬럼이랑 동일하면 프로시저내에서 파라미터를 컬럼으로 읽을 수 있어 에러가 발생할 수 있다.

 

함수 파라미터에는 함수파라미터라고 알 수 있게 p_컬럼 이렇게 짓는게 좋을것이다.

 

ex) 내가 구현한 것.

 

CREATE OR REPLACE FUNCTION F_SELECT_SHAPE(p_pnu VARCHAR,p_dong VARCHAR)

    RETURN sde.ST_GEOMETRY
   IS
    shape SDE.ST_GEOMETRY;

   BEGIN 
  shape :=NULL;

  /* 1. bd_mgt_sn 을 이용해 shpae을 찾기 못찾을 시 2번실행*/
        SELECT nvl2(MAX(rb.shape), sde.st_geometry_operators.st_transform_f(MAX(rb.shape),5186), NULL) as SHAPE
    INTO shape 
     FROM "EHIS"."TL_SPBD_BULD_RASS"  rb 
       WHERE 1=1 AND 
    (select bd_mgt_sn from "EHIS"."TL_SPBD_BULD_RASS"  rb 
    where substr(bd_mgt_sn,0,19)=p_pnu 
    and REPLACE(buld_nm_dc,'동','') = REPLACE(p_dong,'동','')) = rb.BD_MGT_SN  ;

    /* 1-1. 1번을 통해 공간정보를 생성했다면 SHAPE을 리턴*/ 
        IF shape IS NOT NULL then
      BEGIN
            RETURN shape;
      END;
        END IF;
        
   /* 2. 1번을 통해 찾지 못하였다면 지번으로 공간정보 생성*/      
        IF shape IS NULL THEN
     BEGIN
   SELECT SDE.st_geometry_operators.st_buffer_f(B.SHAPE,1) 
   INTO shape
   FROM LIMS.LAND_INFO_BASE_MAP_POINT B
   WHERE B.PNU = p_pnu; 
   RETURN shape;
      END;
        END IF;

END;

 

오류가나면 로그를 추적해서 찾으면 될것!

 

다음에는 프로시저를 이용해 구현하는것을 진행해봐야겠다.

'DB > oracle' 카테고리의 다른 글

데이터베이스 인덱스(index)  (0) 2019.02.18
profile

개발Story

@슬래기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!