DBMS별 DEPTH별로 트리목록을 출력하기위한
재귀쿼리를 만들어보도록 하겠습니다.
재귀쿼리는 트리형 메뉴 혹은 부서 또는 직급별로
각 레벨이 구분되어있고 단계별로 한방에 출력하고자 할때
사용이 되는 방법(?)입니다.
이번 포스팅은 MS-SQL과 Oracle에 대하여 포스팅 하도록 하겠습니다.
MySQL에서는 재귀쿼리에 사용되는 문법이 제공되지 않아
FUNCTION을 이용하여 만들어 사용하므로
MySQL 재귀호출에 대해서는 제외하도록 하겠습니다.
우선적으로 MSSQL과 오라클에 재귀호출을 하기위해서 임의의 테이블 + 데이터가 필요하겠습니다.
DBMS 공통적으로 적용할수 있는 테이블을 생성 해보도록 하겠습니다.
create table parent_child( child int, parent int, name varchar(50) ); insert into parent_child values(1,0,'홍길동할아버지'); insert into parent_child values(2,0,'이순신할아버지'); insert into parent_child values(3,0,'개발로짜할아버지'); insert into parent_child values(4,1,'홍길동아버지1'); insert into parent_child values(5,1,'홍길동아버지2'); insert into parent_child values(6,3,'개발로짜아버지'); insert into parent_child values(7,4,'홍길동아버지1의아들'); insert into parent_child values(8,4,'홍길동아버지1의딸'); insert into parent_child values(9,6,'개발로짜아들');
위처럼 가족관계에 대한 샘플 데이터를 생성하였습니다.
제일먼저 다루어볼 재귀쿼리는 MSSQL과 오라클 공통적으로 사용이 가능한 문법입니다.
문법은 같으나 살짝 다른 부분이 있어서 두개쿼리 나눠서 작성을 해보았습니다.
WITH recursive_query(child,parent,name,sort,dept_name) AS ( SELECT child , parent , name , convert(varchar(255), child) sort , convert(varchar(255), name) dept_name FROM parent_child WHERE parent = 0 UNION ALL SELECT b.child , b.parent , b.name , convert(varchar(255), convert(nvarchar,c.sort) + ' > ' + convert(varchar(255), b.child)) sort , convert(varchar(255), convert(nvarchar,c.dept_name) + ' > ' + convert(varchar(255), b.name)) dept_name FROM parent_child b, recursive_query c WHERE b.parent = c.child ) SELECT name, dept_name FROM recursive_query order by sort
WITH recursive_query(child,parent,name,sort,dept_name) AS ( SELECT child , parent , name , ''||child sort , ''||name dept_name FROM parent_child WHERE parent = 0 UNION ALL SELECT b.child , b.parent , b.name , c.sort || ' > ' || b.child sort , c.dept_name || ' > ' || b.name dept_name FROM parent_child b, recursive_query c WHERE b.parent = c.child ) SELECT name, dept_name FROM recursive_query order by sort
위처럼 MSSQL과 Oracle의 문법은 동일하지만
문자열 표시의 합치는 부분의 차이로 인해서 쿼리를 두개로 나누었습니다.
또다른 차이점이라고 하면 차이일수 있겠지만
WITH recrusive_query다음에 괄호부분의 컬럼지정하는 문법은
Oracle에서는 필수지만 MSSQL에서는 제외하셔도 무방합니다.
오라클에는 추가로 재귀쿼리를 지원합니다
-- name 컬럼만 출력해도 되지만 연결점을 확인하기 위한 LTRIM , SYS_CONNECT_BY_PATH를 사용해보았음 SELECT name, LTRIM (SYS_CONNECT_BY_PATH (name, ' > '), ' > ') AS dept_name FROM parent_child -- 시작지점 START WITH parent = 0 -- 트리구조로 연결할 부모와 자식간의 아이디값 CONNECT BY PRIOR child=parent
오라클의 경우 호출쿼리(2) 쿼리가 간단하니
START WITH CONNECT BY문을 사용하시는게 나으실듯..
3가지 재귀쿼리코드를 작성했었는데
결과는 모두 동일할것입니다 ^^
by 개발로짜
MySQL,ORACLE(오라클),MSSQL 2005(+) 페이징쿼리 작성하여 동작시켜보기 (0) | 2014.10.27 |
---|---|
oracle,mssql,mysql 문자열 합치기 사용법을 비교해보자 (0) | 2014.10.17 |
오라클 시퀀스 생성법과 테이블에 등록시 시퀀스 자동증가등을 알아보자 (0) | 2014.10.15 |
MySQL과 MSSQL의 시퀀스생성 및 초기화 하는방법에 대해서 알아보도록 하자 (0) | 2014.10.14 |
MySQL- GROUP_CONCAT 함수로 세로로 출력된 결과를 하나의 컬럼에 가로로 출력하기 (0) | 2014.10.13 |
jQuery를 이용하지 않아도 쿠키 핸들링은 가능합니다.
하지만 jQuery Cookie 플러그인은 이미 만들어져있고
사용법 또한 간단하기때문에 포스팅 하게되었습니다.
이번 포스팅에서 다룰 내용은
쿠키정보 저장 및 불러오기, 정보 삭제 등에
대한 내용을 작성하도록 하겠습니다.
제일먼저 jQuery Cookie 플러그인 js파일을 다운받아야 겠죠?
https://github.com/carhartl/jquery-cookie
접속하셔서 Download ZIP버튼을 클릭하여 플러그인을 받습니다.
다운로드 받으셨다면 압축해제 후 src 디렉토리 안에 있는 jquery.cookie.js 파일을
해당 프로젝트내에 include해줍니다.
보통 쿠키는 보안이 좋지 않기때문에 간단한 정보를 담는정도로만 사용하셔야합니다.
예를들어 로그인페이지에서 체크박스클릭으로 아이디 저장기능정도(?)로 사용하시면 되겠습니다.
그럼 로그인화면을 예로들어서 쿠키플러그인을 사용해보도록 하겠습니다.
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="jquery.cookie.js"></script>
아이디 : <input type="text" id="login_id" /><br/> 아이디저장 <input type="checkbox" id="rememberid" /><br/> <input type="button" id="login_button" value="로그인" />
$(function(){ //최초 쿠키에 login_id라는 쿠키값이 존재하면 var login_id = $.cookie('login_id'); if(login_id != undefined) { //아이디에 쿠키값을 담는다 $("#login_id").val(login_id); //아이디저장 체크박스 체크를 해놓는다 $("#rememberid").prop("checked",true); } //로그인 버튼 클릭시 $("#login_button").click(function(){ //아이디 미입력시 if($.trim($("#login_id").val()) == "") { alert("아이디를 입력하세요"); return; //아이디 입력시 } else { //아이디저장 체크되어있으면 쿠키저장 if($("#rememberid").prop("checked")) { $.cookie('login_id', $("#login_id").val()); //아이디저장 미체크면 쿠키에 정보가 있던간에 삭제 } else { $.removeCookie("login_id"); } alert("로그인!!"); } }) })
스크립트 코드를 보시면 주석으로 설명을 달아놓았습니다.
쿠키 값을 불러올 경우 $.cookie("저장된쿠키의key값") 으로 값을 불러왔습니다.
이 사용은 get을 의미합니다.
※ 존재하지 않는 쿠키값일경우 undefined값이므로 조건 체크를 해주셔야 하겠습니다.
다음은 로그인 버튼 클릭시 체크박스 유무에 따라서
체크박스 체크시 : $.cookie("저장할쿠키key값","저장할쿠키값") 으로 특정 쿠키명에 값을 저장해주었습니다.
이 부분은 set을 의미합니다.
체크박스 해제시 : $.removeCookie("삭제할쿠키key값") 을 사용하였습니다.
참 심플하지 않은가요? ^^???
추가로 쿠키값 set을 해줄경우 추가적인 몇가지 옵션에 대해서 간단하게 설명을 드리겠습니다.
$.cookie('쿠키명','쿠키값',{ //쿠키보관일 expires : 5 //도메인 ,domain : 'http://hellogk.tistory.com' //https/http 결정 ,secure : false });
위 설정에보시면 쿠키값 저장해주실때 추가로 속성을 정의하실수 있습니다.
1. expires - 생성한후 만료일자를 정해주는것입니다. 값에 5라고 정할경우 5일동안 정보를 저장합니다.
2. domain - 쿠키 저장할 도메인인대 거의 사용되지 않는 옵션일거 같습니다.
3. secure - HTTPS 프로토콜 사용시 true 속성을 되겠습니다.
위 속성외에도 path라고 쿠키 경로를 설정하는 것이 있는데 뭔지 정확하게 몰라서 있다는 정도만 알아두시면 되겠습니다 ^^;;
초기 화면
아무래도 쿠키정보가 전혀없으니 현재는 빈값입니다.
아이디저장체크안하고 아이디입력후 로그인버튼 클릭
확인버튼 클릭후 새로고침
새로고침 결과 쿠키정보를 저장안했으므로 빈값이 Load 되었습니다.
이어서, 쿠키정보를 저장하도록 해보겠습니다.
아이디저장체크후 로그인버튼 클릭
확인버튼 클릭 후 새로고침
새로고침한 다음에 아이디 text태그에 입력값이 들어가고
아이디저장 체크박스에 체크가 되어러 로드된것을 확인할 수 있었습니다.
by 개발로짜
jqGrid 플러그인을 이용하여 그리드 연동 및 목록 출력시켜보기 + ajax 페이징 포함 (7) | 2014.11.10 |
---|---|
jQuery Validation 플러그인을 이용하여 손쉽게 검증하기 (1) | 2014.10.22 |
jQuery blockUI 플러그인을 이용하여 레이어팝업(모달) 만들기 (2) | 2014.10.21 |
jQuery tablednd 플러그인을 사용하여 테이블을 드래그앤드롭으로 순서변경하기 (0) | 2014.10.15 |
jQuery jqPlot를 사용하여 선형,원형(파이형),막대형 그래프 생성하기 (9) | 2014.10.15 |
블로그 이사를 결정하고 포스팅을 꾸준히 작성하기 시작했습니다.
네이버 검색유입량을 늘리기위한 블로그 신청을 하였습니다.
2014/10/06 - [블로그팁] - 내 블로그를 네이버 검색등록을 이용하여 검색에 노출시키자
하지만 1주일이 지나고 10일이 지나도 네이버 등록이 안된다는...
우선은 글을 꾸준히 썻나갔습니다.
그대로 복사+붙여넣기의 포스팅은 무의미하다 판단하여
좀더 좋은 내용의 포스팅을 작성을 진행하고는 있지만 너무 힘이든답니다~
책이나 온라인으로 글을쓰시는 분들이 대단하다고 생각되네요 ㅠㅠ
하지만 30~40개정도의 포스팅으로는 검색등록을 거절 하더라고요
심사결과 메일을 2번이나 받았습니다 ..;;
정책변경이 되면서 네이버 검색등록이 까다로워 진거는 사실인거 같습니다.
하지만 포기란 없다!!
약 50개정도의 글이 등록된 다음 다시한번 신청한 결과!!
드뎌 유입량이 들어오기 시작했습니다 ^_________^
이제는 블로그꾸민다고 이것저것 건들지 않아야 겠어요 ㅠㅠ
오로지 품질좋은 포스팅만을 제공하도록 할것입니다 ㅎㅎ
by 개발로짜
블로그 개설이 완료되었습니다 ^^ (0) | 2014.10.02 |
---|