오라클 foreach for문으로 변환 질문이요. 0 6 2,921

by ekekekek [Oracle 기초] [2018.06.21 15:11:08]



 <foreach collection="p_Keys" item="item" index="index" open="(" close=")" separator="OR ">
    <foreach collection="item" item="listItem" index="spIndex" open="(" close=")" separator="AND ">
        <choose>
            <when test="!empty(listItem) and spIndex == 0">JI_SEQ = #{listItem}</when>
            <when test="!empty(listItem) and spIndex == 1">GU_CD = #{listItem}</when>
        </choose>
    </foreach>
</foreach>

안녕하세요. 현재 오라클로 report 프로그램에 연동하여서 사용하려 합니다.

리포트 툴 내에서 쿼리를 작성해서 데이터를 받아서 맵핑을 시켜서 출력하는 형태입니다.

p_Keys는 파라미터 변수로 리스트안에 string형 배열 형태로 값이 넘어옵니다.

기존 쿼리에서는 foreach형태로 사용하다가 리포팅 툴내에서는 foreach문을 사용할 수없는 상황이라

foreach문을for문 형태나 javascript 형태로 변경을 해야될꺼 같은데 

item, index, open, separator등을..어떻게 처리를 해줘야할까요?

by 우리집아찌 [2018.06.21 15:18:39]

리포트 프로그램이면 대부분 SQL만 넣어줘서 컬럼명으로 LIST 형식으로 화면에 뿌리지 않나요?

위에 주신 질문으로는 어렵네요.

SQL , 원본데이터 , 원하는 출력형식을 알려주세요

 


by ekekekek [2018.06.21 15:27:27]

오라클을 사용중인데 원본 쿼리에는

 SELECT
            A.JI_SEQ,
            A.GU_CD,
            (SELECT 
                CD_NAME 
            FROM TB_ORG_INFO 
            WHERE 1=1
                AND PROJECT_YEAR = '2017'
                AND ORG_MST_CD = '20') AS BO_NM
        FROM TB_GAGU_LIST_MASTER A
        WHERE 1=1

AND 
            <foreach collection="p_gaguKeys" item="item" index="index" open="(" close=")" separator="OR ">
                <foreach collection="item" item="listItem" index="spIndex" open="(" close=")" separator="AND ">
                    <choose>
                        <when test="!empty(listItem) and spIndex == 0">A.JOSAJI_SEQ = #{listItem}</when>
                        <when test="!empty(listItem) and spIndex == 1">A.GAGU_CD = #{listItem}</when>
                    </choose>
                </foreach>
            </foreach>

형태로 사용중이며 저 foreach문을 돌고나면

AND 

    ( 
          A.JI_SEQ = '2052' 
          AND  A.GU_CD = '0011' 
     ) 
     OR  ( 
          A.JI_SEQ = '2052' 
          AND  A.GU_CD = '0023' 
    ) 

)

위의 형태의 데이터가 출력됩니다.

저런 식으로 foreach문을 사용하지않고 and문을 만들고싶습니다.


by 우리집아찌 [2018.06.21 15:50:02]

    ( 
          A.JI_SEQ = '2052' 
          AND  A.GU_CD = '0011' 
     ) 
     OR  ( 
          A.JI_SEQ = '2052' 
          AND  A.GU_CD = '0023' 
    ) 

이부분의 값을 구분자 넣어서 만들수 잇나요?

EX)  '2050:0011|2052:0023'  이런식으로요..

그리고 넘어오는 값은 보통 얼마나 되나요?


by ekekekek [2018.06.21 16:00:03]

데이터는 [[Ljava.lang.String;@618c5880, [Ljava.lang.String;@45066d88] 형태로 넘어와서

foreach 문에서 가공해서 

A.JI_SEQ = '2052' 
AND  A.GU_CD = '0011' 

형태로 출력됬었고

개수는 최소 한개에서 최대 5개까지 받습니다.


by 우리집아찌 [2018.06.21 16:23:03]

[[Ljava.lang.String;@618c5880, [Ljava.lang.String;@45066d88]

=>A.JI_SEQ = '2052' AND  A.GU_CD = '0011' 

이렇게 변환이 되나요?

Ljava.lang.String;@618c5880 => 2052

Ljava.lang.String;@45066d88 => 0011

 

이렇게는 만들지 못하나요?

2052,0011|2052.0023 


by ekekekek [2018.06.21 16:29:55]

넘길때 기존에는 string배열형으로 넘겼었는데 그냥 string 형태로 넘겨서

javascript 형태로 사용하여 만들어서 해결했습니다. 

채택을 눌러드리려는데 badrequest가 출력되서 이문제 해결되면 채택해드리겠습니다.

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입