2013년 6월 3일 월요일

DB 연결 테스트

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>DB Connection Test</title>
</head>
<body>
<%
String DB_URL = "jdbc:oracle:thin:@2008server:1521:aonetest";
String DB_USER = "aonetest";
String DB_PASSWORD= "1111";

Connection conn;
Statement stmt;

try {
 Class.forName("oracle.jdbc.driver.OracleDriver");
 conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
 stmt = conn.createStatement();
 conn.close();
 out.println("oracle jdbc test: connect ok!!");
} catch(Exception e) {
 out.println(e.getMessage());
}
%>
</body>
</html>

2013년 5월 9일 목요일

Mybatis foreach 문법


<foreach collection="param.place" item="place"   open="(" close=")" separator="or">
      sh.SNA_SHOW_KIND_IDX = ${place}
 </foreach>

collection = 전달받은 인자값

item   = 전달받은 인자값을 다른이름으로 대체 

open 해당 구문이 시작할떄 (

close 해당구문이 끝날떄

separator  한번 이상 반복할때 반복되는 사이에  해당 문을 넣어줌


note: "collection"파라미터 객체로 MyBatis 에 List 인스턴스나 배열을 전달 할 수 있다. 그렇게 하면 MyBatis는 Map으로
      자동으로 감싸고 이름을 키로 사용한다. List 인스턴스는 'LIST' 를 키로 사용하고, 배열 인스턴스는 'array'
      를 키로 사용한다.


ex)

<select id="..." parameterType="..." resultType="Map">
    select * from test
    <where>
        name in
        <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
            #{item.value}
        </foreach>
    </where>
</select>

mybatis user guide를 보면 foreach의 경우 list나 array 타입을 collection으로 설정할 수 있으며 이때 list나 array 데이터는 map으로 타입이 변환되어 저장된다고 함.



//
// list를 사용할 경우(변수 이름은 list가 아니어도 됨)
//
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");

<!-- collection 속성 값은 반드시 list나 array만 설정해야 함 -->
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
    #{item.value}
</foreach>

value 속성을 사용한 것으로 보아 Map.Entry.getValue 메서드를 호출하는 것이 아닐까 하는데...

//
// array를 사용할 경우(변수 이름은 array가 아니어도 됨)
//
String[] array = new String[] { "a", "b", "c" };

<!-- collection 속성 값은 반드시 list나 array만 설정해야 함 -->
<foreach collection="array" item="item" index="index" separator="," open="(" close=")">
    ${array[index]}
</foreach>

select의 parameterType이 map이나 java 오브젝트라면 collection 값에 속성 이름을 설정하면 된다고 함.
//
// parameterType="Map"
//
Map<String, Object> map = new HashMap<String, Object>();
map.put("friendList', list);
<select id="..." parameterType="Map" ...>
    <foreach collection="friendList" .../>
</select>

// parameterType="{Java object}"
//
SomeJavaClass pojo = new SomeJavaClass();
pojo.setEnemyList(list);
<select id="..." parameterType="SomeJavaClass" ...>
    <foreach collection="enemyList" .../>
</select>

2013년 3월 20일 수요일

오라클 주민번호 체크


select '주민번호',
  translate('주민번호', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') ,
  translate('주민번호', '0123456789'||'주민번호', '0123456789'),
 (case when
        MOD(11 -
            MOD(
                substr('주민번호',1,1) * 2 +
                substr('주민번호',2,1) * 3 +
                substr('주민번호',3,1) * 4 +
                substr('주민번호',4,1) * 5 +
                substr('주민번호',5,1) * 6 +
                substr('주민번호',6,1) * 7 +
                substr('주민번호',7,1) * 8 +
                substr('주민번호',8,1) * 9 +
                substr('주민번호',9,1) * 2 +
                substr('주민번호',10,1) * 3 +
                substr('주민번호',11,1) * 4 +
                substr('주민번호',12,1) * 5
            ,11)
          , 10)  = substr('주민번호',13,1)  
       then 'T'
       else 'F'
       end)
from duall

2013년 3월 18일 월요일

oracle 날짜 차이 계산


SELECT EMP_NO,
       FST_ENT_DT,
       MONTHS_BETWEEN(SYSDATE , TO_DATE(FST_ENT_DT,'yyyymmdd')) "개월차" ,
       TRUNC(MONTHS_BETWEEN(SYSDATE , TO_DATE(FST_ENT_DT,'yyyymmdd')) /12,0 ) "년" ,
       TRUNC(MOD(MONTHS_BETWEEN(SYSDATE , TO_DATE(FST_ENT_DT,'yyyymmdd')) /12,1 ) *12,0)  "월",
      ROUND(MOD(MOD(MONTHS_BETWEEN(SYSDATE , TO_DATE(FST_ENT_DT,'yyyymmdd')) /12,1 ) *12,1)*(365/12),0)  "일"
  FROM TBH_EMP
 WHERE EMP_NO = 'E20050107'


2013년 2월 20일 수요일

oracle 다중 Row를 한 컬럼으로 처리


 SELECT TASK_SEQ,
           SUBSTR(MAX(SYS_CONNECT_BY_PATH(COMP_NM,',')),2)
    FROM (
             SELECT TASK_SEQ, COMP_NM ,
                    ROW_NUMBER() OVER(PARTITION BY TASK_SEQ ORDER BY TASK_SEQ) AS RNUM
             FROM W_MINI_TASK_COMP
             WHERE  task_seq = 8235
         )
    START WITH RNUM =1
    CONNECT BY PRIOR RNUM = RNUM -1 AND PRIOR TASK_SEQ = TASK_SEQ
    GROUP BY TASK_SEQ
 
   - W_MINI_TASK_COMP 이 PK 는 TASK_SEQ , TASK_COMP_SEQ 이고 ',' 로 묶고자 하는 회사명의 GROUP KEY 는 TASK_SEQ

2013년 1월 29일 화요일

모든 테이블의 rowcount 조회


SELECT table_name,
       num_rows
  FROM all_tables
 WHERE owner = 'xxx' ;

오라클 컬럼 찾기


--해당컬럼 사용하는 곳 찾기

1. PROC, FUNC, TRIGGER
 1) 해당 user에 대하여
SELECT *
FROM USER_SOURCE
WHERE TEXT LIKE '%TECHR_CD%'

 2) 모든 uesr에 대하여
SELECT *
FROM DBA_SOURCE
WHERE TEXT LIKE '%TECHR_CD%'

2. view
 1) 해당 user에 대하여
SELECT *
FROM USER_VIEWS
WHERE dbms_xmlgen.getxml('select text from user_views where view_name = ''' || view_name || '''') like '%TECHR_CD%';

 2) 모든 uesr에 대하여
SELECT *
FROM DBA_VIEWS
WHERE dbms_xmlgen.getxml('select text from DBA_views where view_name = ''' || view_name || '''') like '%TECHR_CD%';

2013년 1월 15일 화요일

오라클 object 내 특정문자열 찾기


SELECT *
  FROM ALL_SOURCE
 WHERE OWNER = '계정'
   --AND TYPE = 'PROCEDURE' --object
   AND TEXT LIKE '%com_member%';  --문자열

2013년 1월 7일 월요일

Lock 확인 및 해제


1. 확인 방법
SELECT DISTINCT t1.session_id AS session_id
   ,t2.serial# AS serial_no
   ,t1.os_user_name AS os_user_name
   ,t1.oracle_username AS oracle_username
   ,t2.status AS status
   ,t3.object_name
   ,DECODE( locked_mode
           ,2, 'ROW SHARE'
           ,3, 'ROW EXCLUSIVE'
           ,4, 'SHARE'
           ,5, 'SHARE ROW EXCLUSIVE'
           ,6, 'EXCLUSIVE'
           ,'UNKNOWN'
          ) lock_mode
FROM v$locked_object t1, v$session t2, dba_objects t3
WHERE t1.session_id = t2.SID
AND t1.object_id = t3.object_id;

2. 확인 방법
select a.sid, a.serial#,a.username,a.process,b.object_name,
decode(c.lmode,2,'RS',3,'RX',4,'S',5,'SRX',8,'X','NO') "TABLE LOCK",
decode (a.command,2,'INSERT',3,'SELECT',6,'UPDATE',7,'DELETE',12,'DROP TABLE',26,'LOCK TABLE','UNknown') "SQL",
decode(a.lockwait, NULL,'NO wait','Wait') "STATUS"
from v$session a,dba_objects b, v$lock c
where a.sid=c.sid and b.object_id=c.id1
and c.type='TM'
;



3. kill 하기
ALTER SYSTEM KILL SESSION s.sid,s.serial#;
ALTER SYSTEM KILL SESSION '121,21';