1. 오라클 에서 PLSQL문 사용시 DB세팅값기준으로 정렬을 다시 해서 PLSQL 문이 실행되어야 할때가 있다. 

이럴때 이런식으로 해보자..

V_ORDERBY_CON :='';    

       FOR ORDERBY_LIST IN  (SELECT PRRY_RNKG_CD

                                  , PRRY_RNKG_NM

                                  , PRRY_RNKG

                                  , EXPL

                               FROM 테이블명

                              ORDER BY PRRY_RNKG) 

         LOOP 

             IF ORDERBY_LIST.PRRY_RNKG_CD = 'A'

             THEN

                V_ORDERBY_CON := V_ORDERBY_CON||', EX1.PPAY_DT ASC';

             ELSIF ORDERBY_LIST.PRRY_RNKG_CD = 'B'

             THEN

                V_ORDERBY_CON := V_ORDERBY_CON||', EX1.LNKG_CD1 ASC';

             END IF;         

         END LOOP;

V_ORDERBY_CON ->여기에 정렬순서에 대한 값을 넣어준다.. 

그리고. 실행전 완벽한 셀렉트문으로 만들어주고

 V_QUERY :='SELECT *

                 FROM 테이블명

                ORDER BY EX1.컬럼명 DESC,EX1.컬럼명 DESC

                         '||V_ORDERBY_CON||' --동적쿼리 위치해주고..

                       , EX1.컬럼명, EX1.컬럼명 DESC, EX1.컬럼명, EX1.컬럼명';

이렇게 만든 문장을 이걸로 실행

EXECUTE IMMEDIATE V_QUERY;

짠 끝. ㅋ.ㅋ 


'Oracle' 카테고리의 다른 글

테이블스페이스 및 계정 생성  (0) 2024.03.14
실행계획 비용검사  (0) 2014.12.12
제약조건 오라클  (0) 2014.12.11
오라클 연습용 데이타.  (0) 2014.12.09
ORACLE SYSTEM TABLE  (0) 2014.12.09
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

알바티스로 SQL 한글 읽었을때 XML안에 적힌 한글이 깨져 있을 때가 있다. 

이럴땐 SQL로드 하는 부분을 수정하자

Charset charset = Charset.forName("UTF-8");

          Resources.setCharset(charset);

Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");

map = SqlMapClientBuilder.buildSqlMapClient(reader);


블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

트위터에서 공개한 오픈 프레임워크.

http://bootstrapk.com/ 

한국사이트


블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,
<div id="dv">
                <table id="tblExport" style="border:1px solid black; ">
                    <thead>
                        <tr>
                            <th>#</th>
                            <th>First Name</th>
                            <th>Last Name</th>
                            <th>Username</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td style='background-color:red;'>1</td>
                            <td>Mark</td>
                            <td>Otto</td>
                            <td>@mdo</td>
                        </tr>
                        <tr>
                            <td>2</td>
                            <td>Jacob</td>
                            <td>Thornton</td>
                            <td>@fat</td>
                        </tr>
                        <tr>
                            <td>3</td>
                            <td>Larry</td>
                            <td>the Bird</td>
                            <td>@twitter</td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <div>
                <button id="btnExport">Export to excel</button>
            </div>
        </div>


$(document).ready(function () {
        $("#btnExport").click(function () {
            $("#tblExport").btechco_excelexport({
                containerid: "tblExport"
               , datatype: $datatype.Table
            });
        });
    });


블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

출처 :http://her0116.comics.pe.kr/64


/ 파일명을 지정 하지 않고 할때

$("#btnExcel").live("click", function () {

window.open('data:application/vnd.ms-excel,' + encodeURIComponent($("#tableName").html()))

 e.preventDefault();

});

// 파일명 지정하고 할때

$("#btnExcel").live("click", function () {
        var a = document.createElement('a');
        var data_type = 'data:application/vnd.ms-excel';
        var table_html = encodeURIComponent($("#tableName").html());
        a.href = data_type + ', ' + table_html;
        a.download = '파일명.xls';
        
        a.click();
        e.preventDefault();
});

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

출처:http://moonstoneit.blogspot.kr/2013/06/html-excle-jsp-html-table-excel-export.html

//Data.html-------------data what you want to make to Excel(엑셀로만들 데이타)


<script type="text/javascript">
function excel(){
document.frm.action = "excel.jsp";
document.frm.excel_data.value = document.getElementById("excel_body").outerHTML;
document.frm.submit();

}
<form name="frm" method="post">
       <input type="hidden" name="excel_data" />
</form>
<table id="excel_body">
<caption>list</caption>
<thead>
<tr>
<th>userid</th>
<th>name</th>
<th>mail</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="data" varStatus="status">
<tr>
<td>
<c:out value='${data.userid}' />
</td>
<td>
<c:out value='${data.username}' />
</td>
<td>
<c:out value='${data.email}' />
</td>
</c:forEach>

</tbody>
</table>



//excel.jsp---------------------use just C&P (그냥복사해서 쓰세요)
<%
request.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment; filename=\"excel.xls\"");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
out.print("<meta http-equiv=\"Content-Type\" content=\"application/vnd.ms-excel; charset=utf-8\">");
%>
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<style type="text/css">
body {font-family:tahoma;font-size:12px}
table {padding:2px;border-spacing:0px;font-family:tahoma;font-size:12px;border-collapse:collapse}
td {text-align:center}
</style>
</head>
<body>
<% out.print(request.getParameter("excel_data")); %>
</body>
</html>

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

jquery excel 저장  (0) 2014.12.24
jquery 엑셀파일 저장할때  (0) 2014.12.24
jqgride formatter  (0) 2014.12.22
jquery table 이나 사이즈 변경시..  (0) 2014.11.28
자바 스프링 3.x  (0) 2014.11.21
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

출처:http://cafe.naver.com/javacreator/853

Jqgrid에서 특정 컬럼에 링크를 걸고 싶거나... 데이터를 다른 값으로 보여주고 싶을 때

formatter를 사용 하면 된다.

$('#gridtable').jqGrid({
   mtype: 'POST',
   height: 'auto',
   width: 300,
   caption: "카테고리",
      colNames:[
    '선택'
   ],
      colModel:[
       { name : 'userid', index: 'userid', width: 80, align: 'right', formatter: setsel }
      ],
});

//--- formatter에 정의 된 함 수는 3가지 인자를 반환한다. cellval 해당 컬럼의 값이다. options는 rowId와 값 등을 구할 수 있으며 rowObject는 해당 row의 데이터값을 가지고 있다. rowObject.userid와 같은 형식으로 접근가능.

 

function setsel( cellval, options, rowObject ){

   var text = '';

   text = '<a href="naver.com">네이버이동</a>';

   return text;

}

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

jquery 엑셀파일 저장할때  (0) 2014.12.24
table 엑셀 데이타로  (0) 2014.12.24
jquery table 이나 사이즈 변경시..  (0) 2014.11.28
자바 스프링 3.x  (0) 2014.11.21
새창에 윈도우 띠우기.  (0) 2014.09.18
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

실행계획 비용검사

Oracle 2014. 12. 12. 14:40

출처 : http://najuung.tistory.com/entry/Oracle-Explain-plan-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 [Oracle] Explain plan 사용하기

Posted by 나정이
 2013/06/04 20:31  컴퓨터 공부/Database 

Oracle에서 Explain plan을 통해 실행계획을 확인해보자!!!


오늘은 오라클에서 Explain plan(실행계획)을 보는 방법에 대하여 정리해 보도록 하겠다. 


우선 오라클 Explain plan에 대하여 설명을 하기에 앞서 실행계획을 왜 사용하는지, 실행계획을 보고 분석할 수 있어야 하는지에 대하여 알아보도록 하겠다. 

간단한 예를 통해 설명하자면 같은 결과를 산출해 나가는 2개의 상의한 쿼리가 잇다고 하자. 그런데 이 두 쿼리를 수행하면 결과가 나오기까지의 시간이 각각 다르다. 물론 늦게 결과를 추출한 쿼리가 성능이 좋지 않은건 사실이지만 왜 성능이 좋지 않은지를 알기위해서는 작성된 쿼리에 대한 옵티마이저가 생성한 실행계획을 해석할 수 있어야만 그 원인을 찾을 수 있다. 



1. Explain plan 이란 


Explain plan(실행계획)이란 이론적으로 실행하기에 앞서 성능을 확인해보고자 도와주는 것이 explain plan 이다. 

그렇다면 문법적으로 들어가보자. 

"explain plan for ~ " 바로 이것이 Explain plan(실행계획)을 확인할 수 있게 도와주는 문법이다. 즉 SQL문의 엑세스 경로를 확인하고 튜닝할 수 있도록 SQL문을 분석하고 해석하여 실행계획을 수립한 후 PLAN_TABLE에 저장하도록 해주는 명령어이라고 할 수 있다..

유의해야 할 사항은, 실행계획을 수행하기 앞서 plan_table 존재여부를 판단한 후 없을 경우 plan_table을 생성해주어야 한다. 하지만 대다수 설치했었을 때 default로 plan_table이 생성되니 너무 걱정하지 말자.~ 

 


문법

EXPLAIN PLAN [ SET statement_id = ‘’ INTO tablename] FOR

SELECT u.user_name,

c.CODE_NAME

FROM tb_common_code c

JOIN tb_user_m u

ON u.USER_POSITION_CODE = c.CODE

ORDER BY u.user_name desc



statement_id

1-30자로 부여할 수 있는 해당 실행문의 제목으로 여러명 의 사용자가 분석 작업을 하게 될 때 분석 결과를 서로 구분하기 위한 식별자를 의미함

 into tablename

출력문을 저장하는 테이블 명으로 plan_table을 사용하지 않을 경우 사용함 

for~ 

실행계획을 수립하고자 하는 sql문을 입력  


2. plan table 생성


plan_table이 없을 경우를 대비해서 plan_table을 생성하는 방법을 정리해보았다. 

오라클은 plan_table을 설치시에 스크립트로 따로 저장을 해주는 것같다. 경로  $ORACLE_HOME\product

\11.2.0\dbhome_1\RDBMS\ADMIN 아래에 utlxplan.sql 파일이 있는데 이 파일을 cmd창에서 아래대로 입력하면 plan_table이 생성되고 만약 이게 실패한다면  sql파일을 메모장으로 연 뒤 안에 들어있는 스크립트를 그대로 복사해서 테이블을 생성해주면 된다. 


아래와 같이 입력하여 실행하면 plan_table을 생성할 수 있다.


@D:\app\HWAJUNG\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlxplan.sql


테이블 생성 후 수행속도 향상과 동일 statement_id가 생성되는 것을 막기 위하여 statement_id에 대한 index를 생성하는 것이 좋다. 필자는 index를 생성하지 않았더니 .. 이것저것 수행결과를 확인해보고 나니 중복된 내용이 너무 많아 알아보기가 불편했다. 그러니 다들 아래의 문법도 꼭 같이 실행해주길 바란다. 


CREATE UNIQUE INDEX plan_index ON PLAN_TABLE(statement_id.id);



3. Explain plan(실행계획) 사용방법


explain_plan을 본떠서 plan_table에 집어넣는 방법까지 해보았다. 그렇다면 이제는 실행계획을 확인해보아야할 차례이다. 

열심히 본뜨기만 하고 보지못한다면 그건 무슨 소용인가 

실행계획은 sql툴마다 조금씩 다른 듯하나, 주로 필자가 자주 쓰는 툴인 sqlplus와 sqlgate 두종류로 준비해보았다. 


1. sqlplus 실행계획 


SET AUTOTRACE TRACEONLY EXPLAIN;


위 명령어를 실행할 후 실행계획을 보고자 하는 문장을 실행하면 옵티마이저가 작성하고 선택한 실행계획을 볼 수 있다





2. sqlgate 실행계획 


EXPLAIN PLAN SET statement_id = 'users' FOR

SELECT u.user_seq,

u.user_name,

c.code_name

FROM tb_common_code c

JOIN tb_user_m u

ON u.user_position_code = c.code

WHERE u.user_seq = '12'

ORDER BY u.user_name DESC


결과 


SELECT * FROM plan_table ;





* plan table 컬럼명 




4. DBMS_XPLAN_PACKAGE


DBMS_XPLAN은 EXPLAN PLAN 구문보다 확장된 정보를 보여준다

Oracle 9.2버전에 소개되었으며, plan_table에 저장된 실행계획을 좀 더 쉽게 출력해 볼 수 있게 되었다.

 

- DISPLAY (예측결과에 대한 sql문장 실행 계획을 보여줌)

- DISPLAY_CURSOR (실행결과에 대한 sql문장 실행계획을 보여줌)

- DISPLAY_AWR ( 특정 과거시점의 문제되는 sql문장에 대한 실행계획을 보여줌 )

- DISPLAY_SQLSET(Tuning Advisor에서 튜닝된 sql의 실행계획을 보여줌) --- 

- VALIDATE_FORMAT

 

위의 Package를 사용하기 위해서는 아래의 객체에 SELECT 권한이 있어야 한다.

 

- V$SESSION

- V$SQL_PLAN

- V$SQL(optional)

- V$SQL_PLAN_STATISTICS_ALL

 


ㄱ . DBMS.XPLAN,DISPLAY 파라미터 


DBMS_XPLAN.DISPLAY는 단일 SQL문에 대해 예측 실행계획을 보여주는 Function이다.

DBMS_XPLAN.DISPLAY는 실측 정보가 아닌 예측정보를 제공한다





ㄴ. FORMAT 종류

 

format의 종류로는 basic, typical, all, outline, advance 5가지 종류가 있다.

EXPLAIN PLAN FOR

SELECT *

FROM tb_menu_m

START WITH menu_parent_seq = '0'

CONNECT BY PRIOR menu_seq = menu_parent_seq

ORDER SIBLINGS BY menu_parent_seq ASC



basic : 가장 기본적인 정보만 보여줌 





-typical : basic보다 rows byte, cost, time등이 추가되었으며 predicate information정보가 추가되었다.




-all : query block정보와 column projection information정보가 추가되었다. Query block name은 oracle에서 임의로 이름을 생성하며 QB_NAME hint로 지정해 사용할 수 있다





-advanced : basic + typical + all + outline에 포함된 모든 정보를 다보여준다.


ㄷ. 사용방법 


sql이 explain되었으면 아래와 같이 입력하여 실행계획을 확인해보도록 한다.

 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

혹은

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(null,null,“basic”,null));



'Oracle' 카테고리의 다른 글

테이블스페이스 및 계정 생성  (0) 2024.03.14
PLSQL 동적 쿼리 만들어 실행하기.  (0) 2016.02.03
제약조건 오라클  (0) 2014.12.11
오라클 연습용 데이타.  (0) 2014.12.09
ORACLE SYSTEM TABLE  (0) 2014.12.09
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

제약조건 오라클

Oracle 2014. 12. 11. 09:16

PK KEY 부여

ALTER TABLE emp ADD CONSTRAINT emp_pk_empno PRIMARY KEY (empno) ;

ALTER TABLE DEPT ADD CONSTRAINT DEPT_pk_DEPTno PRIMARY KEY (DEPTNO) ;

FK KEY 부여

ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno FOREIGN KEY (deptno) REFERENCES dept(deptno); 


'Oracle' 카테고리의 다른 글

PLSQL 동적 쿼리 만들어 실행하기.  (0) 2016.02.03
실행계획 비용검사  (0) 2014.12.12
오라클 연습용 데이타.  (0) 2014.12.09
ORACLE SYSTEM TABLE  (0) 2014.12.09
CUBRID vs MySQL vs ORACLE SQL 타입별 비교  (0) 2014.12.08
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,
DROP TABLE EMP;
DROP TABLE DEPT;
DROP TABLE BONUS;
DROP TABLE SALGRADE;
DROP TABLE DUMMY;
 
CREATE TABLE EMP
       (EMPNO NUMBER(4) NOT NULL,
        ENAME VARCHAR2(10),
        JOB VARCHAR2(9),
        MGR NUMBER(4),
        HIREDATE DATE,
        SAL NUMBER(7, 2),
        COMM NUMBER(7, 2),
        DEPTNO NUMBER(2));
 
INSERT INTO EMP VALUES
        (7369, 'SMITH''CLERK',     7902,
        sysdate,  800, NULL, 20);
         
INSERT INTO EMP VALUES
        (7499, 'ALLEN''SALESMAN',  7698,
        sysdate, 1600,  300, 30);
         
INSERT INTO EMP VALUES
        (7521, 'WARD',   'SALESMAN',  7698,
        sysdate, 1250,  500, 30);
         
INSERT INTO EMP VALUES
        (7566, 'JONES''MANAGER',   7839,
        sysdate,  2975, NULL, 20);
         
INSERT INTO EMP VALUES
        (7654, 'MARTIN', 'SALESMAN',  7698,
        sysdate, 1250, 1400, 30);
         
INSERT INTO EMP VALUES
        (7698, 'BLAKE''MANAGER',   7839,
        sysdate,  2850, NULL, 30);
         
INSERT INTO EMP VALUES
        (7782, 'CLARK''MANAGER',   7839,
        sysdate,  2450, NULL, 10);
INSERT INTO EMP VALUES
        (7788, 'SCOTT''ANALYST',   7566,
        sysdate, 3000, NULL, 20);
         
INSERT INTO EMP VALUES
        (7839, 'KING',   'PRESIDENT', NULL,
        sysdate, 5000, NULL, 10);
         
INSERT INTO EMP VALUES
        (7844, 'TURNER', 'SALESMAN',  7698,
        sysdate,  1500,    0, 30);
         
INSERT INTO EMP VALUES
        (7876, 'ADAMS''CLERK',     7788,
        sysdate, 1100, NULL, 20);
         
INSERT INTO EMP VALUES
        (7900, 'JAMES''CLERK',     7698,
        sysdate,   950, NULL, 30);
         
INSERT INTO EMP VALUES
        (7902, 'FORD',   'ANALYST',   7566,
        sysdate,  3000, NULL, 20);
         
INSERT INTO EMP VALUES
        (7934, 'MILLER', 'CLERK',     7782,
        sysdate, 1300, NULL, 10);
 
CREATE TABLE DEPT
       (DEPTNO NUMBER(2),
        DNAME VARCHAR2(14),
        LOC VARCHAR2(13) );
 
INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');
 
CREATE TABLE BONUS
        (ENAME VARCHAR2(10),
         JOB   VARCHAR2(9),
         SAL   NUMBER,
         COMM  NUMBER);
 
CREATE TABLE SALGRADE
        (GRADE NUMBER,
         LOSAL NUMBER,
         HISAL NUMBER);
 
INSERT INTO SALGRADE VALUES (1,  700, 1200);
INSERT INTO SALGRADE VALUES (2, 1201, 1400);
INSERT INTO SALGRADE VALUES (3, 1401, 2000);
INSERT INTO SALGRADE VALUES (4, 2001, 3000);
INSERT INTO SALGRADE VALUES (5, 3001, 9999);
 
CREATE TABLE DUMMY
        (DUMMY NUMBER);
 
INSERT INTO DUMMY VALUES (0);
 
COMMIT;

문서에 대하여

  • - 강좌 URL : http://www.gurubee.net/lecture/2150
  • - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
  • 구루비의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.


'Oracle' 카테고리의 다른 글

실행계획 비용검사  (0) 2014.12.12
제약조건 오라클  (0) 2014.12.11
ORACLE SYSTEM TABLE  (0) 2014.12.09
CUBRID vs MySQL vs ORACLE SQL 타입별 비교  (0) 2014.12.08
INSERT ALL  (0) 2014.12.04
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,