<%@ 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년 6월 3일 월요일
2013년 5월 9일 목요일
Mybatis foreach 문법
<foreach collection="param.place" item="place" open="(" close=")" separator="or">
sh.SNA_SHOW_KIND_IDX = ${place}
</foreach>
sh.SNA_SHOW_KIND_IDX = ${place}
</foreach>
collection = 전달받은 인자값
item = 전달받은 인자값을 다른이름으로 대체
open 해당 구문이 시작할떄 (
close 해당구문이 끝날떄
separator 한번 이상 반복할때 반복되는 사이에 해당 문을 넣어줌
note: "collection"파라미터 객체로 MyBatis 에 List 인스턴스나 배열을 전달 할 수 있다. 그렇게 하면 MyBatis는 Map으로
자동으로 감싸고 이름을 키로 사용한다. List 인스턴스는 'LIST' 를 키로 사용하고, 배열 인스턴스는 'array'
를 키로 사용한다.
ex)
mybatis user guide를 보면 foreach의 경우 list나 array 타입을 collection으로 설정할 수 있으며 이때 list나 array 데이터는 map으로 타입이 변환되어 저장된다고 함.
value 속성을 사용한 것으로 보아 Map.Entry.getValue 메서드를 호출하는 것이 아닐까 하는데...
select의 parameterType이 map이나 java 오브젝트라면 collection 값에 속성 이름을 설정하면 된다고 함.
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일 화요일
오라클 컬럼 찾기
--해당컬럼 사용하는 곳 찾기
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;
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'
;
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';
ALTER SYSTEM KILL SESSION '121,21';
피드 구독하기:
글 (Atom)