◈ CONNECT BY의 실행순서

    (1) START WITH 절

    (2) CONNECT BY 절

    (3) WHERE 절


 


◈ 

    START WITH : 시작위치 설정 (서브쿼리를 사용가능)

    CONNECT BY : 순환고리의 조건 (서브쿼리를 사용불가)

    ORDER SIBLINGS BY : 같은 레벨중 순환고리 순서를 정할때 사용


 


◈ PRIOR 의 위치 

    (1) CONNECT BY PRIOR 자식컬럼 =       부모컬럼  ==> 부모에서 자식으로 트리 구성

    (2) CONNECT BY       자식컬럼 = PRIOR 부모컬럼  ==> 자식에서 부모으로 트리 구성



◈ 데이터가 많아질 경우....


    - START WITH MENU_ID = 'TOP' 

          MENU_ID 컬럼에 index가 생성되어 있지 않는다면 속도를 보장할 수 없습니다.


    - CONNECT BY PRIOR MENU_ID = UP_MENU_ID 

          역시 PRIOR 쪽의 컬럼값이 상수가 되기 때문에 UP_MENU_ID컬럼에 index를 생성하여야 CONNECT BY의 속도를 보장할 수 있습니다.


    - 계층구조를 CONNECT BY, START WITH로 풀면 부분범위 처리가 불가능하고 Desc으로 표현하기가 어렵 습니다.

  


◈  

    (1) '상품' 메뉴는 모두 출력 안함.

    SELECT

            LEVEL AS LEV

          , MENU.*

    FROM    

            TBL_MENU  MENU

    WHERE               MENU.MENU_NAME  <> '상품'

    START WITH          MENU.MENU_ID = 'TOP'

    CONNECT BY PRIOR    MENU.MENU_ID = MENU.UP_MENU_ID

    ORDER SIBLINGS BY   MENU_SEQ 

    

    (2) '상품'메뉴 밑으로 모든 메뉴는 출력안함.

    SELECT

            LEVEL AS LEV

          , MENU.*

    FROM    

            TBL_MENU  MENU

    START WITH          MENU.MENU_ID    = 'TOP'

    CONNECT BY PRIOR    MENU.MENU_ID    = MENU.UP_MENU_ID

    AND                 MENU.MENU_NAME  <> '상품'

    ORDER SIBLINGS BY   MENU_SEQ 

    

    ** 참고) 메뉴중 2LEVEL까지만 결과 출력

    (WHERE조건으로도 LEVEL <= 2가능함. 그러나 권하지는 않는다. 

     왜? WHERE 조건은 모든 나온결과에 대해서 FILTER하지만 CONNECT BY절의 조건으로 넣으면 순환자체를 안한다. 즉 성능에 좋다)

    SELECT

            LEVEL AS LEV

          , MENU.*

    FROM    

            TBL_MENU  MENU

    START WITH          MENU.MENU_ID    = 'TOP'

    CONNECT BY PRIOR    MENU.MENU_ID    = MENU.UP_MENU_ID

    AND                 LEVEL  <= 2

    ORDER SIBLINGS BY   MENU_SEQ     

   

    

◈ 

    (1) 들여쓰기로 결과출력

    SELECT

            LPAD(’ ’, 4*(LEVEL-1)) || MENU.MENU_NAME

          , MENU.*

    FROM

            TBL_MENU  MENU

    WHERE               MENU_TYPE_CD = '1'

    START WITH          MENU.MENU_ID = 'TOP'

    CONNECT BY PRIOR    MENU.MENU_ID = MENU.UP_MENU_ID

    ORDER SIBLINGS BY   MENU_SEQ

    

    (2) 엑셀과 같이 셀 단위로 들여쓰기

    SELECT 

             DECODE(LEV, '1', MENU_NAME, '') AS LEV1

           , DECODE(LEV, '2', MENU_NAME, '') AS LEV2

           , DECODE(LEV, '3', MENU_NAME, '') AS LEV3

           , DECODE(LEV, '4', MENU_NAME, '') AS LEV4

           , DECODE(LEV, '5', MENU_NAME, '') AS LEV5

    FROM

           (

             SELECT

                     LEVEL AS LEV

                   , MENU.*

             FROM    TBL_MENU  MENU

             WHERE               MENU_TYPE_CD = '1'

             START WITH          MENU.MENU_ID = 'TOP'

             CONNECT BY PRIOR    MENU.MENU_ID = MENU.UP_MENU_ID         

             ORDER SIBLINGS BY   MENU_SEQ 

           ) 


    <div id="bbsTotalDiv">

        <ul id="divList">

            <li id="shareFileList">

                <a href="<c:url value="/bo/bbs/main/tab/AR_searchList.do"/>?bbsCd=${Bbs.BBS_SHARE_FILE}">                     <span onclick="jsMove('shareFileList');">공유 파일</span></a>

            </li>

            <li id="mediaList">

                <a href="<c:url value="/bo/bbs/main/tab/AR_searchList.do"/>?bbsCd=${Bbs.BBS_MEDIA}">

                <span onclick="jsMove('mediaList');">언론보도</span></a>

            </li>

            <li id="photoList">

                <a href="<c:url value="/bo/bbs/main/tab/AR_searchList.do"/>?bbsCd=${Bbs.BBS_EVENT_PHOTO}">                   <span onclick="jsMove('photoList');">행사사진</span></a>

            </li>

            <li id="movieList">

                <a href="<c:url value="/bo/bbs/main/tab/AR_searchList.do"/>?bbsCd=${Bbs.BBS_MOVIE}">

                <span onclick="jsMove('movieList');">동영상</span></a>

            </li>

            <li id="shareImgList">

                <a href="<c:url value="/bo/bbs/main/tab/AR_searchList.do"/>?bbsCd=${Bbs.BBS_SHARE_IMG}">                       <span onclick="jsMove('shareImgList');">공유 이미지</span></a>

            </li>

            <li id="prList">

                <a href="<c:url value="/bo/bbs/main/tab/AR_searchList.do"/>?bbsCd=${Bbs.BBS_PR}">

                <span onclick="jsMove('prList');">광고/홍보물</span></a>

            </li>

        </ul>

    </div>


- li  리스트가 이렇게 있으면.. 선택시 이벤트를 주고 (jsMove) Jquery 에서 순서변경

- Jquery 함수

var jsMove = function(id) {

    $("#" + id).prependTo("#divList");

};


* 속성값

- begin : 반복에 사용될 것 중 첫번째 항목의 Index. 0부터 시작한디 정의되지 않으면 0

- end : 반복에 사용될 것 중 마지막 항목의 Index. 정의되지 않으면 목록의 갯수에서 1개 뺀 값이겟죠.(Index 는 0부터)

- step : 반복할 때 마다 건너 뛸 Index 갯수. for 문의 i값에 더해지는 것과 같은 개념. 기본은 1


* 속성 중 varStatus 값

- Index : 숫자값을로 items 에 정의된 목록(Collection)의 항목을 가리키는 Index (0부터 시작)

- Count : 숫자값. 루프 돌떄 현재 몇 번째 반복인지를 나타낸다. (1부터 시작)

- First : boolean 값. 현재 반복이 첫번째인지 판단

- Last: boolean 값. 현재 반복이 마지막인지 판단


* EX

<c:forEach items="${dataBean.tagNms}" var="tagNm" varStatus="status">

    ${tagNm}<c:if test="${status.last eq false}">,</c:if>

</c:forEach>


- dataBean.tagNms 가 String[] 인데.. 화면에 보여줄때 콤마(,) 를 찍어줄건데 마지막값에는 콤마(,) 안 찍게 할려고

   ${status.last} 로 확인


   이거할려고 찾아본거니까...ㅡ,.ㅡ;;

'공부 > JSTL' 카테고리의 다른 글

JSTL_[ Function(fn) 기초문법 ]  (0) 2013.03.26
JSTL_ [ Core(c) 기초문법 ]  (0) 2013.03.26
JSTL_[ Web.xml에 taglib element 추가하기 ]  (0) 2013.03.26

날자를 입력하는 폼을 사용할때(DatePicker) 이런걸 사용할때...

하루전/한달전/1년전 모 이런거 사용하자나 쉽게 자바스크립트로 계산하는 방법

오늘날짜 기준으로 특정날짜 계산


        /* 날짜계산 */

        var jsDateCalculation = function(date, term) {

            

            var selectDate = date.split("-");

            var changeDate = new Date();

            

            if( term == 'day' ) {

   // 하루전

                changeDate.setFullYear(selectDate[0], selectDate[1]-1, selectDate[2]-1);

            }

            if( term == 'week' ) {

               // 일주일전

                changeDate.setFullYear(selectDate[0], selectDate[1]-1, selectDate[2]-7);

            }

            if( term == 'month' ) {

                changeDate.setFullYear(selectDate[0], selectDate[1]-2, selectDate[2]);

            }

            if( term == 'year' ) {

               // 일년전

                changeDate.setFullYear(selectDate[0]-1, selectDate[1]-1, selectDate[2]);

            }

            

            var y = changeDate.getFullYear();

            var m = changeDate.getMonth() + 1;

            var d = changeDate.getDate();

            

            if(m < 10) { 

                m = "0" + m;

            }

            if(d < 10) {

                d = "0" + d;

            }

            var resultDate = y + "-" + m + "-" + d;

            return resultDate;

        };

* EL 비교연산자

연산자

설명

 eq

 ==

 ne

 !=

 lt

 <

 gt

 >

 le

 <=

 ge

 >=

- JSP 에서 <c:if ~> 로 무언가를 할때 eq , ne 마니쓰는데 밑에 꺼는 좌/우를 자꾸 헷갈려서 다시 보는김에 정리

- 컴파일러가 일반적으로 경고하는 내용 중 제외시킬때 쓰인다.(경고제외)


- 옵션

1. all : 모든 경고를 억제

2. cast : 캐스트연사자 관련 경고억제

3. dep-ann : 사용하지 말아야 할 주석관련 경고억제

4. deprecation : 사용하지 말아야 할 메서드관련 경고억제

5. fallthrough : switch 문에서의 break 누락관련 경고억제

6. finally : 반환하지 않는 finally 블럭관련 경고억제

7. null : null 분석관련 경고억제

8. rawtypes : 제네릭을 사용하는 클래스 매개변수가 불특정일때의 경고억제

9. unchecked : 검증되지 않은 연산자관련 경고억제

10. unused : 사용하지 않는 코드관련 경고억제


- 예 ) @SuppressWarnings("unchecked")

지역변수와 관련이 있는 건데.. 우선

예제)

<script>

// 함수 선언

function text(name) {

var output = 'Hello' + name + '...!';

}

// 출력

alert(output);

</script>

 

위의 예제 함수안에 있는 변수는 지역변수 이므로, 함수 외부에서 사용할 수 없습니다.(alert)

지역변수는 함수가 실행될때 생성되고 함수가 종료될 때 사라진다. 하지만, 클로저란? 것을 사용하면 이 규칙을 위반할 수 있다.

 

예제)

<script>

// 함수선언

function outerFunction(name) {

var output = 'Hello' + name + '...!';

return function() {

return output;

}

}

// 변수선언

var first = outerFunction('JavaScript');

var second = outerFunction('jQuery');

// 출력

alert(first);

alert(second);

</script>

 

이걸 가능하게 하려고 클로저 함수 사용

 

    // 숫자인지 체크
    public boolean isNumeric(String str) {

        Pattern pattern = Pattern.compile("[+-]?\\d+");
        return pattern.matcher(str).matches();
    }

 

- 보더(border)의 두께(width) 관련속성



  • 속성 : border-top-width, border-right-width, border-bottom-width, border-left-width
  • 값 : thin, medium, thick, 길이, inherit
  • 기본값 : medium
  • 적용대상 : 모든 요소


값은 공백문자로 구분하여 복수지정 가능하며 지정하는 값에 따라 적용대상이 달라진다.

  • 값이 한 개 : '상하좌우'
  • 값이 두 개 : '상하' '좌우'
  • 값이 세 개 : '상' '좌우' '하'
  • 값이 네 개 : '상' '우' '하' '좌'


- 보더(border)의 스타일(style) 관련속성



  • 속성 : border-top-style, border-right-style, border-bottom-style, border-left-style
  • 값 : none, hidden, dotted, dashed, solid, double, groove, ridge, inset, outset, inherit
  • 기본값 : none
  • 적용대상 : 모든 요소


none
hidden
dotted
dashed
solid
double
groove
ridge
inset
outset



값은 공백문자로 구분하여 복수지정 가능하며 지정하는 값에 따라 적용대상이 달라진다.



  • 값이 한 개 : '상하좌우'
  • 값이 두 개 : '상하' '좌우'
  • 값이 세 개 : '상' '좌우' '하'
  • 값이 네 개 : '상' '우' '하' '좌'


보더(border)의 색(color) 관련속성



  • 속성 : border-top-color, border-right-color, border-bottom-color, border-left-color
  • 값 : 색, transparent, inherit
  • 기본값 : 색상 속성의 값
  • 적용대상 : 모든 요소


값은 공백문자로 구분하여 복수지정 가능하며 지정하는 값에 따라 적용대상이 달라진다.

  • 값이 한 개 : '상하좌우'
  • 값이 두 개 : '상하' '좌우'
  • 값이 세 개 : '상' '좌우' '하'
  • 값이 네 개 : '상' '우' '하' '좌'


- 보더(border)의 일괄지정



사방 보더(border)의 두께,스타일,색 속성의 일괄 지정이 가능하며 복수지정도 가능하고 순서를 따지지 않으며 생략 가능하다.

보더 관련 속성은 값을 상속하지 않으므로 값을 생략한 때에는 기본값을 지정한 것으로 인식한다.
사방에 모든 보더를 지정한 뒤 좌우의 보더를 개별적으로 설정이 가능하다. 하지만 우선순위 규칙이 적용되서 중첩될경우 나중에 지정한 스타일이 덮어쓰여진다.

 

'공부 > CSS' 카테고리의 다른 글

CSS_[RGB 색상표 보기]  (0) 2015.07.30

플러그인 인스톨


Help - Install New Software 클릭




http://download.aptana.com/studio3/plugin/install 입력




Next


Next



이클리스를 재시작






Install Aptana Features


Install Aptna Features 를 클릭




Ajax Libraries - jQuery Support 를 선택 후 Install 버튼을 클릭




Ajax Frameworks - Aptana Support for jQuery 선택 후 Next 버튼을 클릭




Finish 클릭




플러그인 설치 - 이클립스 재시작 후 WIndow - Preferences 클릭




Aptana - Editors - JavaScript - Code Assist 메뉴에서 jQuery를 선택







만약 편집기가 설치 전의 그냥 보통 편집기일 경우 설정에서 변경해줘야 합니다.




+ Recent posts