실제 운영중에 그리드에 레이블명을 DB상에서 가져와야 되는경우가 발생하여 사용하였다.

1
2
3
4
5
6
7
8
9
10
var gridOptions = {
 
    colModel : [
        
        { label: '지역'             , name'AREA_NAME'       , width :"70"  , align:'center'       , edittype  :'text'},
        { label: '시도'             , name'SIDE_NAME'       , width :"100" , align:'left'         , edittype  :'text'},                            
        { label: '시군구'           , name'SIGN_NAME'       , width :"70"  , align:'center'        , edittype  :'text'}
        
    ]
};
cs

 

1) 정적인 콜모델 정보를 선언한다.

 

1
2
3
4
<c:forEach var="list" items="${arrList}" >
   gridOptions.colModel.push({ label: "${list.name}"   , name"area_${list.code}"       , width :"70"  , align:'center'         , edittype  :'text'});
</c:forEach>
 
cs

 

2) 서버에서 읽어온 정보를 jstl를 이용하며 label, name 정보를 동적으로 생성한다.

 

 

1
2
3
4
5
6
7
8
 $("#grid1").jqGrid({
         url: '',
         datatype: "json",
         mtype: 'POST',
         jsonReader: { },                
         colModel :gridOptions.colModel,
         ..... (중략)....
     });
cs

 

3) 그리드 로드시 설정한 콜모델 정보를 배열형태로 셋 해준다.

 

'자바스크립트' 카테고리의 다른 글

DOM API - Document 객체에 접근하는 API  (0) 2018.12.12
자바스크립트 객체지향 프로그래밍  (0) 2018.10.10
객체 생성방법 3가지  (0) 2018.10.09
jqGrid 환경설정하기  (0) 2016.02.18
jqGrid 기본속성  (0) 2015.12.15
블로그 이미지

클라인STR

,

SQL 추출시 하나의 컬럼에  "," 콤마로 문자열을 합치기 위해서 찾아보니 LISTAGG 함수를 발견했다.

Oracle 11g에 추가된 함수이며 그룹핑된 문자열 RECORED 데이터를 하나의 컬럼으로 합칠때 사용된다.

 

1
SELECT * FROM EMP;
cs

 

 

 

 

1
2
3
SELECT JOB, LISTAGG(ENAME, ',') WITHIN GROUP (ORDER BY ENAME) ENAME
  FROM EMP
 GROUP BY JOB;
cs

 

 

 

'DataBase' 카테고리의 다른 글

평균값을 구할때 NULL 값  (0) 2018.10.24
SQL 쿼리 잘짜는 방법  (0) 2018.10.10
소계와 합계 구하는 방법 (1)  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
COPY_T 테이블이란?  (0) 2015.12.16
블로그 이미지

클라인STR

,

 

TABLE을 4번복제하기위하여 카티젼프로덕트 이용한다.

1
2
3
4
5
6
7
SELECT * FROM TEST12 A
        ,(
           SELECT ROWNUM RCNT 
             FROM TEST12 
            WHERE ROWNUM < 5        
         )B;
 
cs

 

 

 

 

4개의 복제된 데이터중 RCNT2를 합계용으로 3을 출판사 소계용으로 가공한다.

 

1
2
3
4
5
6
7
8
9
10
SELECT  DECODE(RCNT,2,'합 계',3,PRESS||'계',PRESS) "출판사" 
        , SUM(PRICE)
        FROM TEST12 A
        ,(
           SELECT ROWNUM RCNT 
             FROM TEST12 
            WHERE ROWNUM < 5        
         )B
         GROUP BY DECODE(RCNT,2,'합 계',3,PRESS||'계',PRESS) ;
 
cs

 

 

책종류에서는 출판사/종류별 계로 사용할 복제번호와 원본데이터로 사용할 복제번호를 지정한다.

1, 출판사종류계 4를 일반데이터로 지정한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      SELECT  DECODE(RCNT,2,'합 계',3,PRESS||'계',PRESS) "출판사" 
               , DECODE(RCNT,1,BOOK_TYPE||' 계',4, BOOK_TYPE) "종류"
               , DECODE(RCNT,4,BOOK_NAME) "책명"
            
        , SUM(PRICE)
        FROM TEST12 A
        ,(
           SELECT ROWNUM RCNT 
             FROM TEST12 
            WHERE ROWNUM < 5        
         )B
         GROUP BY DECODE(RCNT,2,'합 계',3,PRESS||'계',PRESS)
                  , DECODE(RCNT,1,BOOK_TYPE||' 계',4, BOOK_TYPE)
                  , DECODE(RCNT,4,BOOK_NAME) 
              
         ORDER BY DECODE(RCNT,2,'합 계',3,PRESS||'계',PRESS);
 
cs

'DataBase' 카테고리의 다른 글

SQL 쿼리 잘짜는 방법  (0) 2018.10.10
오라클 문자열 합치기 LISTAGG  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
COPY_T 테이블이란?  (0) 2015.12.16
누계를 구하는 방법에 대하여 (2)  (0) 2015.12.14
블로그 이미지

클라인STR

,

프로시저는 PL/SQL을 통해 만들어지고 특정 작업을 수행하는 서브 프로그램이다. 자주 사용되는 SQL문을 DB 객체로 생성해서 저장한 후 사용시에 프로시저명을 호출해서 사용한다. PL/SQL에서 FUNCTION 은 리턴값을 반환하는데 반해 프로시저는 지정된 작업을 수행 후에 결과값을 반환할 수도 있고 반화나지 않을 수 있다. FUNCTION과 프로시저의 차이점은 FUNCTION은 SQL문 내부에서 사용할 수 있지만, 프로시저는 EXEC 또는 EXECUTE의 실행문을 통해서 사용된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE OR REPLACE PROCEDURE "프로시저명" (
  PARAMETER IN|OUT DATATYPE
 
)  IS
 
  
  --변수선언부
  
  
  BEGIN
 
  --처리내용
 
  EXCEPTION 
  --예외처리부분
          
  END;
 
cs

CREATE OR REPLACE PROCEDURE : 프로시저를 생성 또는 이미 있으면 기존 프로시저를 대체

프로시저명 : 생성할 프로시저이름

파라메터 : 프로시저에게 전달할 파라미터 이름과 데이터 타입을 명시한다.

IN  : 변수값을 입력받을때 사용

OUT : 프로시저 처리 후 리턴할 변수명

INOUT : 파라미터로 변수값을 받고 프로시저 처리후 리턴할 변수명

 

변수 선언 부 : 사용할 변수를 명시한다.

 

 

 

출처:실전 DB 모델링과 SQL for ORACLE

블로그 이미지

클라인STR

,

COPY_T 테이블이란?

DataBase 2015. 12. 16. 00:57

COPY_T 테이블이란 기준 테이블을 원하는 배수만큼 복제하여 결과 집합을 구할 때 사용하거나 데이터 체크에 사용된다.

1
2
3
4
5
CREATE TABLE COPY_T
AS 
SELECT ROWNUM AS NUM , TO_CHAR(ROWNUM , '009') AS VAL
FROM USER_TABLES
WHERE ROWNUM < 101;
cs

 

 

 

COPY_T테이블을 이용하여 총인원수 합계를 구해보자

1
2
3
4
5
6
7
SELECT  
        A.*,B.NUM
       
   FROM  EMP2 A
       , COPY_T B
  WHERE A.EMP_TYPE = '정규직'
    AND B.NUM < 3 ;
cs

 

 

B.NUM <3 조건에 의하여 2개의 레코드만 추출되고 여기서 EMP2 테이블과 카디젼 조인이 되어 10*2 = 20으로 뻥튀기 된다.

NUM=2인 레코드만 합산해서 구한다.

1
2
3
4
5
6
7
8
9
10
11
12
SELECT  
          DECODE(NUM,1,DEPTNO,'합계') AS DEPTNO
        , DECODE(NUM,1,NAME,'합계') AS NAME 
        , COUNT(DECODE(NUM,1,NAME,'합계')) AS TOTAL
       
   FROM  EMP2 A
       , COPY_T B
  WHERE A.EMP_TYPE = '정규직'
    AND B.NUM < 3
    GROUP BY DECODE(B.NUM,1,A.DEPTNO,'합계')
           , DECODE(NUM,1,NAME,'합계')
      ORDER BY DEPTNO;
cs

 

 

'DataBase' 카테고리의 다른 글

소계와 합계 구하는 방법 (1)  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
누계를 구하는 방법에 대하여 (2)  (0) 2015.12.14
누계를 구하는 방법에 대하여 (1)  (0) 2015.12.10
SUBSTR 함수  (0) 2015.12.09
블로그 이미지

클라인STR

,

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

var grid = jQuery("#grid1");

        grid.jqGrid({

            url: '/sample/openSampleBoardList.do',

            mtype: "POST",

            datatype: "local",

            postData : JSON.stringify(  jQuery("#frm01").serialize() ),

            editUrl : 'clientArray',

            cellSubmit: 'clientArray',

            colNames: ['글번호''제목''설명'],                    

            colModel:[

                      {  name'SAMPLE_NO'    , width:30  , align:'center'   },

                      {  name'TITLE'        , width:30  , align:'left'     },   

                      {  name'DESCRIPTION'  , width:30  , align:'left'     }                      

            ],

            loadtext : "<img src='/images/loading.gif' />",            

            width:1145,                

            height :540,

            regional : 'kr',

            viewrecords: true,                        

            pager: "#pager1",

            page:1,

            pgbuttons:true,

            rowNum:10,            

            recordpos:'right',       //우측좌측 기준변경 records의 위치 설정

            rowList : [ 2050100500 ],

            loadonce : false,            // 데이타 가져오는 방식 true: 최초 한번 ,

            rownumbers : false// 줄번호 표시 여부        

            altRows:true

            gridview:true,

            sortable : true,

            caption: '게시판 목록',

            jsonReader: {

                page: 'page',

                total: 'total',            

                root: 'rows',

                repeatitems:false

            },

            loadComplete : function(data){ //데이타 로딩후 

                           },

            onSelectRow : function(id){                            // 로우 클릭

                

            },

            ondblClickRow : function(rowid, status, e){        //로우 더블클릭

            }

        });    

cs

 

url : 데이터를 가지고 올 수 있는 주소를 지정함

mtype : 요청방식을 설정함. GET / POST

datatype : grid에 바인딩할 데이터 형식을 지정한다. json, xml ,local 주로 세가지 사용함

colName: 헤더에 출력할 컬럼의 이름을 배열형태로 적음

colModel: 각 컬럼에 대한 상세 정보를 설정함. 예제소스 참조

jsonReader/xmlReader : 데이터 타입에 따라 reader를 통해 데이터를 어떻게 읽는지 설정함

rowNum : 초기에 출력될 데이터의 개수를 설정함

rowList : 출력된 데이터 리스트를 콤보형태로 표시함

loadonce : 데이터를 가져오는 방식 true인경우는 한번만 가져옴. 페이징을 할거면 false가 나음.

pager: 그리드에 대표기능인 페이징을 설정함 div id를 지정함

autowidth : true 이면 알아서 화면에 곽차게 하며, false 이면 width 속성을 줘서 가로사이즈를 지정함

width : 그리드 가로사이즈

height : 그리드 세로사이즈

shrinkToFit : true 인경우 그리드 width 맞춰 자동으로 맞춰짐

rownumbers : true 인경우 순번이 생성됨

altRows: true 인경우 title태그 처럼 값이 커서에 자동 표시됨

multiselect : true인경우 여러줄을 선택할 있다.

viewrecords : true인경우 전체 레코드의 수를 표현할지를 여부

'자바스크립트' 카테고리의 다른 글

DOM API - Document 객체에 접근하는 API  (0) 2018.12.12
자바스크립트 객체지향 프로그래밍  (0) 2018.10.10
객체 생성방법 3가지  (0) 2018.10.09
jqGrid 환경설정하기  (0) 2016.02.18
동적 colModel  (0) 2016.01.05
블로그 이미지

클라인STR

,

각 레코드 하나에 대해 자기보다 작은 값을 가지는 RECORD 수 만큼 조인이 걸린다.

조인에 의해 생성된 집합의 각 레코드가 어떤 그룹핑단위를 가질것인지를 결정해준다.

결정된 그룹핑 단위로 그룹을 지으면 원래 테이블에 있는 각 레코드가 그룹핑 단위가 되어 누계가 나오게되고

, 그것을 원래 값과 조인시켜주면 원하는 값이나온다.

 

 

 

1
2
3
4
SELECT ROWNUM RCNT, B
 
   FROM TEST01
  WHERE A <= '00010';
cs

 

 

 

위와 같은 쿼리를 만들어서 IN-LINE VIEW를 사용하고 GR_1이라 하자.

 

1
2
3
SELECT ROWNUM JCNT
  FROM TEST01
 WHERE A <= '00010';
cs

 

 

위와 같은 쿼리를 만들어서 IN-LINE VIEW를 사용하고 GR_2이라 하자.

 

두개의 테이블을 조인하면 RECORD수가 그 제곱만큼 늘어나는 데이터가 생김 (CARTESIAN PRODUCT) 이생긴다.

JCNT  1을 기본 레코드로, 2는 참조하고자 하는 전값, 3은 전 전값,  4는 그 전값 식으로 순위를 가지게된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT DECODE(JCNT, 1, RCNT , RCNT -1 + JCNT ) R_CNT , B , JCNT
  
  
  FROM ( 
         SELECT ROWNUM RCNT ,
                A,
                B
           FROM TEST01
          WHERE A<= '00010'
        ) GR_1, 
        (
          SELECT ROWNUM JCNT
            FROM TEST01
           WHERE A<= '00010'
        ) GR_2 ;
cs

 

 

 

 

카티젼프로덕트이므로 10*10 = 100레코드형태로 표출되며, RCNT에 대하여 JCNT를 첨자로 하는 2차월 배열형태로 생긴다.

JCNT가 1이면 RCNT 값을 , 그보다 크면 RCNT -1 + JCNT 값을 SUM을 위한 그룹핑 단위로 가지면된다.

 

 

추출된 모든 RECORD는 RCNT와 JCNT를 갖는다.

JCNT를 기준으로 하든 RCNT를 기준으로 하든 똑같은 결과가 나온다.

JCNT를 기준으로 생각해보는 경우 JCNT가 1이면, RCNT 자신의 값이 GROUP 단위가 되고, JCNT가 2이면 RCNT-1,

3이면 RCNT-2, 4이면 RCNT-3이 동일 그룹단위가 된다.

 

 

 

출처 : 이채남의 오라클 실습

 

'DataBase' 카테고리의 다른 글

소계와 합계 구하는 방법 (1)  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
COPY_T 테이블이란?  (0) 2015.12.16
누계를 구하는 방법에 대하여 (1)  (0) 2015.12.10
SUBSTR 함수  (0) 2015.12.09
블로그 이미지

클라인STR

,

 

1
2
3
4
이름 널        유형           
-- -------- ------------ 
A  NOT NULL VARCHAR2(10
B           NUMBER       
cs

 

1
SELECT * FROM TEST01;
cs

다음과같은 원본데이터에 값의 누계를 구하고 싶다면 ?

 

1) 오라클 분석함수를 이용하여 구하기

1
2
SELECT  A AS "코드", B AS "값" , SUM(B) OVER (ORDER BY B) AS "누계값"
FROM TEST01;
cs

 

 

2) 부등호 조인을 이용하여 구하기

1
2
3
4
5
6
7
8
SELECT 
        X.A
      , X.B
      , Y.B
FROM TEST01 X
   , TEST01 Y
WHERE Y.A <=X.A
  AND X.A <= '00012';
cs

 

둘중하나를 다른 쪽보다 작거나 같다로 조건으로 조인을 걸어준결과 1건의 행에 대해 자신의 A컬럼 값보다 작거나 같은 행들의 수 만큼 행들이 연결된다.

GROUP BY 를 하고 B_1 값을 SUM해준다.

 

1
2
3
4
5
6
7
8
9
10
SELECT 
        X.A
      , X.B
      , SUM(Y.B) ACC
FROM TEST01 X
   , TEST01 Y
WHERE Y.A <=X.A
  AND X.A <= '00012'
GROUP BY X.A
      , X.B ;
cs

 

 

 

출처 : 전문가로 가는 길 오라클 실습 (이채남님 저서)

 

'DataBase' 카테고리의 다른 글

소계와 합계 구하는 방법 (1)  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
COPY_T 테이블이란?  (0) 2015.12.16
누계를 구하는 방법에 대하여 (2)  (0) 2015.12.14
SUBSTR 함수  (0) 2015.12.09
블로그 이미지

클라인STR

,