오라클 기초 실습내용 1/3

 

기본 sql 사용과 해당문법의 설명을 확인하면서 기초를 다시 확인할수있을듯함..

 

워낙 오래전 자료다 보니... 지우는것보단...이렇게라도 .... 가끔보게되면

 

뭔가 새로운 기분이 들지않을까..해서......

 

 

  /# pc-oracle              #/
  /##########################/

=============================================
sql>connect system/manager

sql>create user 계정 identified by pass번호

sql>grant connect, resource to 계정
=============================================
시스템 계정으로 접속
SQL> connect system/manager
연결되었습니다.
=============================================
SQL> create table ss
  2   (s_id char(2) not null,
  3   sname varchar2(10) not null,
  4   status number(3) not null,
  5   city varchar2(10),
  6   constraint ss_s_id_pk primary key (s_id));  //주키

 ss 테이블이 생성


=============================================
SQL> create table pp
  2   (p_id char(2) not null,
  3   pname varchar2(10) not null,
  4   color varchar2(5) not null,
  5   weight number(3) not null,
  6   city varchar2(10),
  7   constraint pp_p_id_pk primary key (p_id));

  pp 테이블이 생성


=============================================
SQL> create table sspp
  2   (s_id char(2) not null,
  3    p_id char(2) not null,
  4    qty number(3) not null,
  5    constraint  sspp_s_id_pk primary key (s_id,p_id),
  6    constraint ss_s_id_fk foreign key (s_id)
  7     references ss on delete cascade,
  8   constraint pp_p_id_fk foreign key (p_id)
  9     references pp on delete cascade);

  sspp 테이블이 생성


=============================================
 SQL> Insert into ss
  2  values('s1','홍길동',20,'서울');

1 개의 행이 작성되었습니다.


=============================================
SQL> select *
  2  from ss;
- - - - - - - - - - - - - - - - - - - -
S_ SNAME         STATUS CITY
-- ---------- --------- ----------
s1 홍길동            20 서울


=============================================
SQL> Insert into ss
  2   values('&s_id','&sname',&status,'&city');
s_id 의 값을 입력하십시오: s2
sname 의 값을 입력하십시오: 손오공
status 의 값을 입력하십시오: 10
city 의 값을 입력하십시오: 부산
구   2:  values('&s_id','&sname',&status,'&city')
신   2:  values('s2','손오공',10,'부산')

1 개의 행이 작성되었습니다.


=============================================
SQL> select *
  2  from ss;

S_ SNAME         STATUS CITY
-- ---------- --------- ----------
s1 홍길동            20 서울
s2 손오공            10 부산
s3 박문수            30 부산
s4 신수동            20 서울
s5 반월성            30 경주
- - - - - - - - - - - - - - - - - - - - -
ss테이블 완성 최종
=============================================

 


SQL> create table 학생             //테이블의 생성.
  2   ( 학번   char(5)  not null,
  3     이름  varchar2(20),
  4     학년  char(1),
  5    신장  number(3));

Table created.                    //테이블 생성 완료!

 

SQL> select * from tab;

 TNAME                          TABTYPE  CLUSTERID
 ------------------------------ ------- ----------
 A                              TABLE
 AA                             TABLE           //중간생략!
 BABO                           VIEW
 BB                             TABLE
 WATERMASTER                    TABLE
 우수공급자                     VIEW
 학생                           TABLE
        49 rows selected.


SQL> desc 학생                              //방금 생성한 테이블의 데이타타입을 본다.
 Name                            Null?    Type
 ------------------------------- -------- ----
 학번                            NOT NULL CHAR(5)
 이름                                     VARCHAR2(20)
 학년                                     CHAR(1)
 신장                                     NUMBER(3)

 

SQL> select * from 학생;       //생성된 테이블을 본다.
   no rows selected             //내용이 없다.


SQL> alter table 학생          //테이블내에 칼럼 추가.         _______________________(page_IV-7)
  2  add (신장2  number(4));   //ADD(칼럼명  테이터 타입)
   Table altered.              //테이블내에 칼럼 추가 성공

 

SQL> desc 학생
 Name                            Null?    Type
 ------------------------------- -------- ----
 학번                            NOT NULL CHAR(5)
 이름                                     VARCHAR2(20)
 학년                                     CHAR(1)
 신장                                     NUMBER(3)
 신장2                                    NUMBER(4)    <== 추가된 칼럼

 

SQL> alter table 학생                          //칼럼 변경  |형|
  2   modify ( 신장2  varchar2(10));           //           |식|
       Table altered.

 

SQL> desc 학생
 Name                            Null?    Type
 ------------------------------- -------- ----
 학번                            NOT NULL CHAR(5)
 이름                                     VARCHAR2(20)
 학년                                     CHAR(1)
 신장                                     NUMBER(3)
 신장2                                    VARCHAR2(10)   <==칼럼의 데이타타입이 NUMBER에서 VARCHAR2로 변경!


SQL> alter table 학생
  2  modify(신장2  not null);    
       Table altered.

 

SQL> desc 학생
 Name                            Null?    Type
 ------------------------------- -------- ----
 학번                            NOT NULL CHAR(5)
 이름                                     VARCHAR2(20)
 학년                                     CHAR(1)
 신장                                     NUMBER(3)
 신장2                           NOT NULL VARCHAR2(10)    <----

 

SQL> alter table  학생
  2  modify(신장2  null);
    Table altered.

 

SQL> desc 학생;
 Name                            Null?    Type
 ------------------------------- -------- ----
 학번                            NOT NULL CHAR(5)
 이름                                     VARCHAR2(20)
 학년                                     CHAR(1)
 신장                                     NUMBER(3)
 신장2                                    VARCHAR2(10)    <----

 

SQL> drop table 학생;    //테이블의 삭제.
    Table dropped.       //테이블 삭제 성공

 

SQL>select * from tab;   /확인!

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
A                              TABLE
AA                             TABLE
BABO                           VIEW
BB                             TABLE
WATERMASTER                    TABLE         //이하생략
우수공급자                     VIEW
     50 rows selected.

 

 

 

 

 

고수들에겐 별거 아니지만... 은근하게 많이 쓰이는 방식으로

 

ul ,li 로 목록을 만들어서 마우스 클릭시 색반전하게 하는 소스이며

 

기냥 소스 긁어서 상황에 맞게 가공해서 쓰면 될듯해서 게시해봅니다..

 

저 역시 항상 Ctrl + C / Ctrl + V 로 일을하니까요~~ ^^*

 

 

 

아래는 관련 소스입니다..

 

기냥 아무생각없이 드래그 카피 해서 html파일로 저장해서 확인하면 끝~!!

 

 


 

 

실행화면

 

 마우스 클릭 시 색 반전되면서 선택 되어지고

 

 컨트롤키와 같이 클릭시 다중선택

 

 마우스로 리스트를 드래그하면 선택되어짐

 

 

 

 

 

 

 

 

 

 

 

 


 

 

아래는 html 스크립트
 

<html>
<head>

  <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
  <script src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>

    
      
<style type="text/css">

 ul.list {
 border:2px solid #cbcccf;
 padding-top:5px;
 padding-left:10px;
 font-size: 12px;
 list-style-type: none;
 width:175px;
 height:150px;
 background-color: rgb(240,245,248);
 }

 ul.list > li{
 padding-top:2px;
 padding-left:2px;
 margin-top:4px;
 margin-right:4px;
 }

 ul.list > .ui-selecting { background: #FECA40; }
 ul.list > .ui-selected { background: #F39814; color: white; }

 #selectable { list-style-type: none; margin: 0; padding: 0; width: 20%; }
 #selectable li { margin: 0px; padding: 2px; font-size:12px; height: 10px; }
 #selectable .ui-selecting { background: #FECA40; }
 #selectable .ui-selected { background: #F39814; color: white; }

</style>

<script type="text/javascript">
<!--
$(document).ready(function() {
	$( ".list" ).selectable();
	$( "#selectable" ).selectable();

});
//-->
</script>
</head>  
<body>
<div >

  <ul class='list'>
       <li>종합</a></li>
       <li>라이프/취미</li>
       <li>문화/엔터</li>
       <li>IT/비즈/학습</li>
       <li>여행</li>
       <li>요리</li>
       <li>MY캐스트</li>
  </ul>
  
  <ol id="selectable">
      <li >Item 1</li>
      <li >Item 2</li>
      <li >Item 3</li>
      <li >Item 4</li>
      <li >Item 5</li>
      <li >Item 6</li>
      <li >Item 7</li>
  </ol>


</div>
</body>
<html>

'IT TIP > jQuery' 카테고리의 다른 글

기초문법..  (0) 2017.04.05
selector 간략 정리  (0) 2017.04.04

 


메타 문자  설명


 
\v  : 수직 탭


\n  : 개행


\f   : 폼 피드


\r   : 캐리지 리턴


\t   : 탭


\b  : 백스페이스


\d  : [0-9]와 동일한 기능

 

\D  : [^0-9]와 동일한 기능


\w  : [a-zA-Z0-9_]와 동일한 기능

 

\W : [^a-zA-Z0-9_]와 동일한 기능  

 

\s  : [\f\n\r\t\v]와 동일한 기능

 

\S  : [^\f\n\r\t\v]와 동일한 기능 

 

\x  : 16진수 숫자와 일치

 

\0  : 8진수 숫자와 일치

 

+ : 문자가 하나 이상 있으면 일치

 

* : 문자가 없거나, 하나 이상 있으면 일치

 

? : 문자가 없거나, 하나만 있으면 일치

 

 

 

 

정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp[1] 또는 regex) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.

 

정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 펄과 Tcl은 언어 자체에 강력한 정규 표현식을 구현하고 있다.

 

컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다.

 

수많은 프로그래밍 언어가 정규 표현식 기능을 제공하고 있으며, 일부는 펄, 자바스크립트, 루비, Tcl처럼 기본 내장되어 있는 반면 닷넷 언어, 자바, 파이썬, POSIX C, C++ (C++11 이후)에서는 표준 라이브러리를 이용하여 구현한다.

 

그 밖의 대부분의 언어들은 라이브러리를 통해 정규식을 제공한다.

 

링크 - 출처 - 위키백과

 

 

 

 

'IT TIP > Web' 카테고리의 다른 글

HTML / Script 연습장  (0) 2017.04.13
MARQUEE 태그  (0) 2017.04.13
HTML Tag 설명  (0) 2017.04.13

 

[Oracle] 사용자정의 SPLIT함수. 예제

 

 

 

..

CREATE OR REPLACE FUNCTION AHRANG.GET_SPLIT(
    IN_STR IN VARCHAR2,
    IN_DEL IN VARCHAR2 DEFAULT ','
)
RETURN VAR_ARRAY PIPELINED
/****************************************************************
  IN_STR 을 IN_DEL 구분으로 분리하여여 1차원 배열로 리턴
  
 TYPE 생성 
 =>  CREATE OR REPLACE TYPE VAR_ARRAY AS TABLE OF VARCHAR2(1000);
 
 사용
 => SELECT * FROM TABLE(GET_SPLIT('ABC DEF 이름 네임 없음' ,' '))
  
*****************************************************************/
AS 
   V_IDX  INTEGER := 0;
   V_STR  VARCHAR2(32767) := IN_STR;
   
   BEGIN
        LOOP
            V_IDX := INSTR(V_STR , IN_DEL );
            IF (V_IDX > 0 ) THEN
                PIPE ROW(TRIM(SUBSTR(V_STR ,1,V_IDX-1)));
                V_STR := TRIM(SUBSTR(V_STR ,V_IDX + LENGTH(IN_DEL)));
            ELSE
                PIPE ROW(TRIM(V_STR));
                EXIT;
            END IF;
            
        END LOOP;
   
   END;


.

 

 

 

 

 

 

 

 

 

 

[Oracle]REGEXP_SUBSTR함수로.SPLIT하기

 

 

..

WITH X AS
( SELECT 'NAVER' AS USER_ID ,'NA1,NA2,NA3,NA4,NA5,NA6,' AS RE_CODE FROM DUAL
   UNION ALL
  SELECT 'NAVER1' AS USER_ID ,'NA7,NA8,NA9,NA10' AS RE_CODE FROM DUAL

)

SELECT REGEXP_SUBSTR(A.RE_CODE, '[^,]+', 1, B.LV) AS RE_CODE
  FROM X A
      ,(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 100) B
 WHERE 1 = 1
   AND B.LV <= REGEXP_COUNT(A.RE_CODE, ',') + 1
   AND UPPER(A.USER_ID) = 'NAVER'
  ;


.



1. 테이블 X의 데이타

 

 No

 USER_ID

 RE_CODE 

 1

 NAVER

 NA1,NA2,NA3,NA4,NA5,NA6,

 2

 NAVER1 NA7,NA8,NA9,NA10






쿼리 실행 결과

 

 No

 RE_CODE 

1

 NA1

2

 NA2

3

 NA3

4

 NA4

5

 NA5

6

 NA6

7

 







 

[Oracle]계층구조 START WITH...CONNECT BY

 

 SELECT ....
   FROM .....
  WHERE ....
  START WITH   계층의 시작점이 될 행을 구별하는 논리식표혐
CONNECT BY 계층을 구성할때 사용될 논리식 표현


START WITH와 CONNECT BY를 이용해 데이터를 계층적인 순서로  조회할 수 있습니다.
 
 
◈ START WITH
 
 - 계층 질의의 루트(부모행)로 사용될 행을 지정 합니다..
 - 서브쿼리를 사용할 수도 있습니다.
 
 
◈ CONNECT BY
 
 - 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정 합니다.
 - 보통 PRIOR 연산자를 많이 사용 합니다..
 - 서브쿼리를 사용할 수 없습니다..
 
 
 
◈ CONNECT BY의 실행순서는 다음과 같습니다.
 
 - 첫째 START WITH절
 - 둘째 CONNECT BY 절
 - 세째 WHERE 절 순서로 풀리게 되어있습니다.

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


예제1)상위계층과 하위 계층 관계의 순서대로 쿼리해 옴
 
 
-- LEVEL 예약어를 사용하여  depth를 표현 할 수 있습니다.
-- 직업이 PRESIDENT을 기준으로 계층 구조로 조회합니다.
 
SQL>SELECT LEVEL,empno,ename, mgr
        FROM  emp
        START WITH job = 'PRESIDENT'   -- 직업이 PRESIDENT를 기준으로
        CONNECT BY PRIOR  empno = mgr; -- 사원(empno)과 관리자(mgr)의  관계를 계층 구조로 조회
   
    LEVEL      EMPNO ENAME                       MGR
--------- ---------- -------------------- ----------
        1       7839      KING
        2       7566      JONES                      7839
        3       7788      SCOTT                     7566
        4       7876      ADAMS                     7788
        3       7902      FORD                       7566
        4       7369      SMITH                       7902
        2       7698      BLAKE                       7839
        3       7499      ALLEN                       7698
        3       7521      WARD                       7698
        3       7654      MARTIN                     7698
        3       7844      TURNER                     7698
        3       7900      JAMES                       7698
        2       7782      CLARK                       7839
        3       7934      MILLER                      7782


--  LEVEL컬럼은 depth를 나타냅니다.
-- JONES의 관리자는 KING을 나타냅니다.
--  SCOTT의 관리자는 JONES를 나타냅니다.
--  예제와 같이 상/하의 계층 구조를 쉽게 조회 할 수 있습니다.

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


예제2) 사원성명을 계층 구조로 보여 줌

SQL>SET LINESIZE 100
SQL>SET PAGESIZE 100
SQL>COL ename FORMAT A20

 -- 예제1의 결과를 가지고 LPAD함수를 이용해서 ename왼쪽에 공백을 추가 했습니다.
SQL>SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, mgr, job
       FROM emp
       START WITH job='PRESIDENT'
       CONNECT BY PRIOR empno=mgr;

 ENAME                     EMPNO        MGR JOB
-------------------- ---------- ---------- ---------
KING                        7839                   PRESIDENT
    JONES                  7566       7839      MANAGER
        SCOTT             7788       7566      ANALYST
            ADAMS         7876       7788      CLERK
        FORD               7902       7566      ANALYST
            SMITH          7369       7902      CLERK
    BLAKE                  7698       7839      MANAGER
        ALLEN               7499       7698     SALESMAN
        WARD               7521       7698     SALESMAN
        MARTIN             7654       7698     SALESMAN
        TURNER            7844       7698     SALESMAN
        JAMES              7900       7698     CLERK
    CLARK                  7782       7839     MANAGER
        MILLER              7934       7782     CLERK

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


예제3) 레벨이 2까지만 쿼리해서 가져오는 예제
  
SQL>SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, mgr, job
        FROM emp
        START WITH job='PRESIDENT'
        CONNECT BY PRIOR empno=mgr
        AND LEVEL <=2 ;
   
ENAME                     EMPNO        MGR JOB
-------------------- ---------- ---------- ---------
KING                        7839                   PRESIDENT
    JONES                  7566       7839      MANAGER
    BLAKE                  7698       7839      MANAGER
    CLARK                  7782       7839      MANAGER 

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


예제4) 각 label별로 급여의 합과 인원수를 구하는 예제
 
SQL> SELECT LEVEL, SUM(sal) total,COUNT(empno) cnt
        FROM emp
        START WITH job='PRESIDENT'
        CONNECT BY PRIOR empno=mgr     
        GROUP BY LEVEL
        ORDER BY LEVEL;
 
     LEVEL      TOTAL        CNT
---------- ---------- ----------
         1       5000          1
         2       8275          3
         3      13850          8
         4       1900          2


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

◈ 데이터가 많아질 경우....
 
 - 첫째로 풀리는 START WITH job='PRESIDENT' job 컬럼에 index가 생성되어 있지 않는다면
    속도를 보장할 수 없습니다.
 
 - 그리고 둘째로 풀리는 CONNECT BY PRIOR empno = mgr 역시 PRIOR 쪽의 컬럼값이 상수가
   되기 때문에 MGR컬럼에 index를 생성하여야 CONNECT BY의 속도를 보장할 수 있습니다.
  
 - 계층구조를 CONNECT BY, START WITH로 풀면 부분범위 처리가 불가능하고 Desc으로
   표현하기가 어렵 습니다.
 

 

'IT TIP > Oracle' 카테고리의 다른 글

sqlplus - 기초실습3  (0) 2017.04.13
sqlplus - 기초실습2  (0) 2017.04.13
sqlplus - 기초실습1  (0) 2017.04.13
사용자정의 SPLIT함수.  (0) 2017.04.06
REGEXP_SUBSTR함수로.SPLIT하기  (0) 2017.04.06
프로시저내 다이나믹 SQL 예제1  (0) 2017.04.05
그룹내 순위결정하는 함수 - ROW_NUMBER() ,RANK() ,DENSE_RANK()  (0) 2017.04.05
오라클 총정리 - DBA 문법  (0) 2017.04.02
함수정리  (0) 2017.04.02
User 생성  (0) 2017.04.02


jQuery에서 변수를 선언할 때 $를 붙이는 것과 안 붙이는 것의 차이점은 아래와 같음.

 

 변수 var a 와 var $a 의 차이점.

 

1. var a;
자바스크립트 변수. 흔히 아는 방식으로 스크립트만 사용 가능하다.

 

2. var $a;

jQuery 변수. jQuery에서 사용하는 내장 함수들을 모두 사용할 수 있음.

 

ex) var a 는 a.css('backgroundcolor', 'blue') 라는 메소드가 안 먹음.
.css 메소드는 jQeury에서만 사용하는 것이므로.
var $a 는 jQuery 변수이므로 모든 스크립트 사용이 가능함.
.css(), .hide(), .show() 등등


//$('#page').attr("style","display : none");
//$('#page').attr("style","display : show");
//$("#page").hide(); $("#page").show();

disable, enable

 

<script>
$("button:gt(1)").attr("disabled","disabled");
</script>


# -> ID
. -> class


# [jQuery] radio 값 가져오기, 설정하기

1. radio 버튼 에서 체크된 값 가져오기.
var mailTp  = $('radio:[name="mailTp"]:checked').val();


2. radio 버튼 값 체크하기
$('input:radio[name=mailTp]:input[value='+mailTp+']').attr("checked", true);


------------------------------------------------------------------
check
$("input[name=cUse]")[0].checked
$("input[name=cUse]").attr("checked", (chk== '1' ? 'checked' : ''));

책크여부확인
alert($('#id').is(':checked'));

책크 갯수 구하기
$("input[name=chk]:checkbox:checked").length

응용: 특정 갯수 이상일때 체크 해제
        $(".check_premier").click(function(){
            if($("input[name=chk_pr]:checkbox:checked").length > 3){
                    alert('최대 3개까지 선택가능합니다.');
                    $(this).attr("checked", '');
            }
        });


    $(".answer2").click(function(){
        if($(".answer2:checkbox:checked").length > 2){
            alert('최대 2개까지 선택가능합니다.');
            $(this).attr("checked", '');
        }
    });

책크박스수만큼 특정 함수 실행
$("input[name=chk]").each(
   function(){
      //실행
   }
}

//상기 응용으로 특정 책크박스가 책크일경우 실행
$("input[name=chk]").each(
   function(){
      if(this.checked){
        //책크되었음
      }else{
        //실행
      }
   }
}

//실응용예제
//jAlert 및 jConfirm 사용
//책크된 것이 있으면 실행하고 아니면 경고 메시지 띄우기
 $("#delfavor").click(function(){
        if($("input[name=chk_delList]:checkbox:checked").length == 0){
            jAlert('하나 이상 선택해 주세요', '경고메시지');
        }else{
            jConfirm('삭제된 데이타는 복구되지 않습니다.n삭제하시겠습니까?', '삭제확인', function(r) {
                if(r==true) {
                    $.post("/myshop/wishlist/wishlist/", {tid:tid,ajax:"true"}, function(data){
                    },"json");//
                }
            });
        }
    });   

체크 해제
$(this).attr("checked", false);

// 전체선택/해제


$("#check_all").click(function(){
            $('input[class="sel_check"]').attr("checked", ( $(this).is(':checked') ? 'checked' : false));                                                    
        });

//아래것보다 상위것을 추천


    //보낸 메일함 전체 선택
    //$("#select_all_sendlist").live('click', function(){    //이후 불러온 폼사용시
        $("#select_all_sendlist").click(function(){
            $('input[id="chk_sendList"]').attr("checked", ( $(this).is(':checked') ? 'checked' : ''));                                                    
    });   


<input type="checkbox" name="" id="select_all_sendlist" class="checkbox" />
<input type="checkbox" name="chk_sendList[{uniqueflag}]" id="chk_sendList" class="checkbox" />
<input type="checkbox" name="chk_sendList[{uniqueflag}]" id="chk_sendList" class="checkbox" />
<input type="checkbox" name="chk_sendList[{uniqueflag}]" id="chk_sendList" class="checkbox" />

 

//check box만 serialize하기
var arr_unchecked_values = $('input[type=checkbox]:not(:checked)').map(function(){return this.value}).get();
var idxs = $("input[name='comment_select[]']:checked").map(function(){return this.value}).get();

 

'IT TIP > jQuery' 카테고리의 다른 글

ul.li.selectable 소스  (0) 2017.04.11
selector 간략 정리  (0) 2017.04.04

 

Dynamic SQL  프로시저 소스 예제

 

 

보통의 개발자들은 업무를 정확하게 분석하고 ,설계해서 확실하게 이건 이거다! 라는 규칙을 찾아내야 ..

 

비로소 프로그램을 작성할수있다

 

그런데...

 

개발을 하다보면 .... 딱히 정해져있지 않고...정할 수 없는 ...

 

그런 업무룰을 가진 프로그램을 개발해야할 경우가 ... 자주 생긴다.. 규칙을 정할 수 없는....

 

암튼 여러사연이 있을수 있지만 ....

 

 

이를 해결하기에  가장 좋은 방법은

 

Dynamic SQL 을 사용하는것이라 본다.... ( 절대적으로 개인적인 견해임니다!! )

 

 

오래된 소스이지만 버리긴 아깝고

 

웬지 나중에 또 쓰일지도 몰라 가지고만 있던... 프로시저를 발견.. ^^*

 

누군가에게 또는 나에게 유용하게 쓰일지도 모를 그 소스를 그대로 올려봅니다.

 

( 소스중 문제가 될만한 소지가 없도록 중요 업무관련 명칭은 치환해서 올려봅니다... )

 

 

APSRC.AP9999_HST_REPORT01.SQL

 

APSRC.AP9999_HST_REPORT02.SQL

 

 


 

 

'IT TIP > Oracle' 카테고리의 다른 글

sqlplus - 기초실습3  (0) 2017.04.13
sqlplus - 기초실습2  (0) 2017.04.13
sqlplus - 기초실습1  (0) 2017.04.13
사용자정의 SPLIT함수.  (0) 2017.04.06
REGEXP_SUBSTR함수로.SPLIT하기  (0) 2017.04.06
계층구조 START WITH...CONNECT BY  (0) 2017.04.06
그룹내 순위결정하는 함수 - ROW_NUMBER() ,RANK() ,DENSE_RANK()  (0) 2017.04.05
오라클 총정리 - DBA 문법  (0) 2017.04.02
함수정리  (0) 2017.04.02
User 생성  (0) 2017.04.02

 

 

 

|Oracle 그룹내 순위결정하는 함수

 

 

select ROW_NUMBER() over(partition by [그룹핑할 컬럼] order by [정렬할 컬럼])

         ,RANK()                over(partition by [그룹핑할 컬럼] order by [정렬할 컬럼])

         ,DENSE_RANK()    over(partition by [그룹핑할 컬럼] order by [정렬할 컬럼])

from 테이블명;

 

 

 

위의 3개 함수들은 그룹을 짓고, 그 안에서의 순위를 결정한다.

 

 

 

세가지 함수는 약간의 차이가 있다.

 

 

ROW_NUMBER() : 1등이 두명이어도 1,2등으로 나눈다.

 

RANK()             : 1등이 두명이면 그 다음 순위는 3등이 된다.

 

DENSE_RANK()   : 1등이 두명이면 그 다음 순위는 2등이 된다.

 

 

 

 

각 함수들의 사용에 대해서 아래 예제 로 확인해보면 개념잡기가 쉬울것이다.

 

 

EX) 예제용 테이블 생성 SQL

CREATE TABLE TEST
(
 A VARCHAR(10),
 B VARCHAR(10)
);

INSERT INTO TEST VALUES ('2','516958');
INSERT INTO TEST VALUES ('1','123458');
INSERT INTO TEST VALUES ('1','458512');
INSERT INTO TEST VALUES ('2','468521');
INSERT INTO TEST VALUES ('2','735196');
INSERT INTO TEST VALUES ('1','794528');

COMMIT;

 

* RANK() 함수는 레코드단위로 순차적으로 순위(1부터 출력)을 부여하고 레코드단위로 같은값에 대해서는 동일한 순위를 부여한다.

 

 PARTITION BY 를 사용하면 전체를 한그룹으로 보는것이 아니라 PARTITION BY 에 사용된 컬럼을 기준으로 다르게 그룹을 나누어 순위를 부여한다.

오라클 8i부터 지원하는 분석함수입니다.

 

아래는 순위입니다.

순위는 동점자가 있을 수 있고 공동 순위가 있다면 중간에 비는 숫자도 있겠죠.

 

 

* RANK()  사용예제

 

SELECT A,B, RANK() OVER(order by A,B) from TEST;

 

결과

1 123458 1
1 123458 1
1 458512 3
1 794528 4
2 468521 5
2 516958 6
2 735196 7


SELECT A,B, RANK() OVER(PARTITION BY A ORDER BY A,B) from TEST;

 

결과

1 123458 1
1 123458 1
1 458512 3
1 794528 4
2 468521 1
2 516958 2
2 735196 3


※ OVER() 함수는 필수입니다.

 

※ OVER() 함수안에 PARTITION BY 는 미필수지만 ORDER BY는 필수이다.

 

※ 보통 OVER() 함수안에 ORDER BY 절에는 출력컬럼을 모두 써준다.

 

※ PARTITION BY 을 사용하면 출력결과를 하나의 그룹으로 보는것이 아니라 PARTITION BY 에 사용된 컬럼을 기준으로 그룹을 나누어지게 된다.(순위도 그룹별로 별개로 1부터 부여지게 된다.)

 

 

 


* ROW_NUMBER() 는 레코드단위로 동일한값이라도 매번 새로운 순위를 부여한다.

 

ROW_NUMBER() 함수는 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서로 유일한 값을 돌려주는 함수이며 ROWNUM 과는 관계가 없습니다.

 

오라클 8i부터 지원하는 분석함수입니다.

 

위에거는 순번이구요


 

순번은 유일한 값이구요,

 

 

* ROW_NUMBER() 기본예제

 

SELECT A, ROW_NUMBER() OVER(ORDER BY A,B) FROM TEST;

 

결과

1 123458 1
1 123458 2
1 458512 3
1 794528 4
2 468521 5
2 516958 6
2 735196 7

 

SELECT A, B, ROW_NUMBER() OVER(PARTITION BY A ORDER BY A,B) FROM TEST;

 

결과

1 123458 1
1 123458 2
1 458512 3
1 794528 4
2 468521 1
2 516958 2
2 735196 3

 

※ OVER() 함수는 필수입니다.

 

※ OVER() 함수안에 PARTITION BY 는 미필수지만 ORDER BY는 필수이다.

 

※ PARTITION BY 을 사용하면 PARTITION BY 에 사용된 컬럼을 기준으로 서로 별개로 1부터 순위를 매기게 됩니다.

 

-------------------------------------------------------

EX)

  SELECT app_year
        ,dept
        ,pnt_grp_cd
        ,final_point1
        ,rank
,dense_rank() OVER(PARTITION BY PNT_GRP_CD ORDER BY (FINAL_POINT1) DESC ) AS SUM_RANK
FROM tr_subject_dept
WHERE APP_YEAR = '2008'
  AND PNT_GRP_CD LIKE '%'
  AND NVL(DEL_YN,'N') <> 'Y'

  

결과


    APP_YEAR DEPT PNT_GRP_CD FINAL_POINT1 RANK SUM_RANK
 1 2008 NGF0 DG01 100.00 1 1
 2 2008 NY00 DG01 100.00 1 1
 3 2008 NJ00 DG01 100.00 1 1
 4 2008 NGH0 DG01 100.00 1 1
 5 2008 NGD0 DG01 100.00 1 1
 6 2008 Z900 DG01 91.50 2 2
 7 2008 ZZ00 DG01 76.50 3 3
 8 2008 Z910 DG01 66.00 4 4
 9 2008 NGB0 DG02 104.00 1 1
10 2008 ND91 DG02 92.00 2 2
11 2008 NG90 DG02 80.00 3 3
12 2008 NG50 DG02 68.00 4 4
13 2008 NG30 DG02 66.00 5 5
14 2008 ND30 DG02 0.00 6 6
15 2008 NAF1 DG02 0.00 6 6
16 2008 ND70 DG02 0.00 6 6
17 2008 ND50 DG02 0.00 6 6
18 2008 NG70 DG02 0.00 6 6
19 2008 N500 DG03 85.00 1 1
20 2008 NAB1 DG03 0.00 2 2
21 2008 NA70 DG03 0.00 2 2
22 2008 N530 DG03 0.00 2 2
23 2008 N550 DG03 0.00 2 2
24 2008 NA30 DG03 0.00 2 2
25 2008 NA50 DG03 0.00 2 2
26 2008 NA90 DG03 0.00 2 2
27 2008 NAD0 DG03 0.00 2 2
28 2008 0000 DG04 69.00 1 1
29 2008 N330 DG04 54.00 2 2
30 2008 0100 DG04 46.00 3 3
31 2008 0500 DG04 40.00 4 4
32 2008 0110 DG04 40.00 4 4
33 2008 N300 DG04 34.00 5 5
34 2008 N100 DG04 34.00 5 5
35 2008 N391 DG04 28.00 6 6
36 2008 N350 DG04 28.00 6 6
37 2008 N370 DG04 28.00 6 6

 

 

 

'IT TIP > Oracle' 카테고리의 다른 글

sqlplus - 기초실습3  (0) 2017.04.13
sqlplus - 기초실습2  (0) 2017.04.13
sqlplus - 기초실습1  (0) 2017.04.13
사용자정의 SPLIT함수.  (0) 2017.04.06
REGEXP_SUBSTR함수로.SPLIT하기  (0) 2017.04.06
계층구조 START WITH...CONNECT BY  (0) 2017.04.06
프로시저내 다이나믹 SQL 예제1  (0) 2017.04.05
오라클 총정리 - DBA 문법  (0) 2017.04.02
함수정리  (0) 2017.04.02
User 생성  (0) 2017.04.02

소스코드 highlight 방법

 

개발소스를 블로깅시 ...

 

아무리 개발자라고 하더라도 조금만 이쁘게 올리고 싶을때가 간혹 있다.. ^^*

 

 

그럴경우 Syntax 변환 사이트를 이용하는 방법과 .... js 를 이용하는 방법이 있는데..

 

아무리 해봐도... 웹사이트를 이용하는것이 훨씬 이뻐보임...

 

 

개인적인 견해입니다~~ 만~~ (^^*)

 

js와 css를 이용해서 div그룹을 써서 사용해봤는데.. 영~ 비주얼이..

 

 

JS와 CSS로 이용하는 방법 

 

 1. https://highlightjs.org/

 

 

 

웹사이트 이용하는 법

 

 1. http://hilite.me/

 

 2. https://tohtml.com/

 

 

 

 

웹사이트를 이용하는 방법은... 간단하다..

 

해당 소스코드를 그대로 Copy 후 사이트에 접속 해서 Paste 한 후.. 버튼 클릭 한번이면

 

소스코드가 이쁜 스타일이 먹은  html 코드로 변경되는 것 뿐... ^^*

 

 

각 사이트별로 취향이 달라서 원하는 디자인에 따라서 사이트를 바꿔가면서 써먹으면 좋을듯...

 

두개 사이트 다 html코드와 Preview 를 같이 한페이지에서 보여줌.

 

블로그나 웹에 올릴경우는 html 코드를 copy해서 사용하면 되고

 

word나 문서 편집기에 붙여넣을때는 Preview를 copy해서 사용하면 됨~!!!

 

 

사이트 hilite.me 는 색상 디자인이 내취향은 아니지만.. ㅋ Line number 를 넣을수 있어서 좋음.

 

 

'IT TIP > Tools & TIP' 카테고리의 다른 글

특수문자 명칭  (0) 2017.04.13
이클립스 단축키  (0) 2017.04.02

+ Recent posts