DB/MYSQL

[MYSQL] ORACLE의 TABLE FUNCTION 구현

울면서개발하기 2025. 4. 22. 09:06

 

1. 아래와 같은 TEXT를 리턴하는 FUNCTION 을 생성한다. TEXT의 내용은 JSON 형태의 문자열이다.

CREATE FUNCTION TBL_IDT_AUTH_TT_DEV(
      IN_USER_ID   VARCHAR(1000)
)
RETURNS TEXT CHARSET UTF8MB4 -- TEXT보다 길다면 MEDIUMTEXT 등을 활용할 수 있다
    DETERMINISTIC
BEGIN
    
    DECLARE V_RETURN TEXT; -- TEXT보다 길다면 MEDIUMTEXT 등을 활용할 수 있다
    
    SELECT JSON_ARRAYAGG(
               JSON_OBJECT(
                   'AUTH_CD'        , A.AUTH_CD                                                        
                 , 'ADMIN_YN'       , A.ADMIN_YN                                                        
           ))
      INTO V_RETURN
      FROM (
               SELECT A.AUTH_CD     AS AUTH_CD          
                    , A.ADMIN_YN    AS ADMIN_YN         
                 FROM CS_WORK_AUTH A
                WHERE A.USER_ID = IN_USER_ID
           ) A
    ;
    RETURN V_RETURN;
END

 

 

2. 1.에서 생성한 FUNCTION 을 SELECT 해보면 아래와 같은 결과가 나온다.

SELECT TBL_IDT_AUTH_TT_DEV('20239010')

 

 

 

3. 2. 의 결과를 JOSN_TABLE을 이용해서 파싱하여 사용한다.

SELECT A.*
  FROM JSON_TABLE(
           TBL_IDT_AUTH_TT_DEV('20239010')
         , '$[*]' COLUMNS (
               AUTH_CD           VARCHAR(255) PATH '$.AUTH_CD'
             , ADMIN_YN          VARCHAR(255) PATH '$.ADMIN_YN'
           )
       ) A

일반 테이블과 JOIN 하여 사용할 수도 있다.

 

 

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

[MYSQL] Mybatis CRUD DML 생성 SQL  (0) 2025.04.30