Archive
[Oracle] WITH clause in SELECT statement
SELECT 구문에서 WITH를 사용하여 subquery에 alias를 지정함으로써, 이 alias를 다른 select 구문에서 사용가능하다.
(from "Oracle® Database SQL Language Reference") WITH dept_costs AS ( SELECT department_name, SUM(salary) dept_total FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY department_name), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) avg FROM dept_costs) SELECT * FROM dept_costs WHERE dept_total > (SELECT avg FROM avg_cost) ORDER BY department_name;
위 구문처럼 두 개의 subquery를 dept_consts와 avg_cost로 alias를 부여함으로써, 하위의 select 구문에서 alias를 사용할 수 있다.
Oracle은 이 두개의 alias들을 inline view 또는 temporary table로 취급한다.
아래는 WITH clause를 사용한 또 다른 예이다.
WITH TEMP_SEA AS ( SELECT O.REG_DT, O.USER_ID FROM USER O WHERE O.REG_DT BETWEEN TO_DATE (:FROM_DATE, 'YYYY-MM-DD HH24:MI') AND TO_DATE (:TO_DATE, 'YYYY-MM-DD HH24:MI')) SELECT TO_CHAR(T.REG_DT, 'YYYY-MM-DD HH24:MI:SS'), W.ORG_CODE, W.NOTICE_PRD, T.USER_ID FROM ORG W INNER JOIN VW_USER G ON (G.ORG_CODE = W.ORG_CODE AND G.GRP_CODE = 'A01'), TEMP_SEA T WHERE W.GRP_CODE = 'A01' AND W.NOTICE_PRD = :NOTICE_PRD AND T.USER_ID = W.USER_ID;
[Java] switch문 사용할 때 한번 만 더 생각해 보자..
원문 : Writing Better Code — Keepin’ it Extensible…(By Matthew Cochran February 21, 2008 )
switch 문을 사용할 때 한번 만 더 생각해 봐야겠다. 꼭 switch문을 사용해서 로직을 처리해야 할 것인지.
이 게시물에서와 같이 클래스의 설계에 의한 처리도 가능한지 고려해 봐야겠다.
public enum AnimalType { Cat, Dog, Wolf, Bear } public class ClosedAnimal { public ClosedAnimal(AnimalType pType) { m_type = pType; } private AnimalType m_type; public AnimalType AnimalType { get { return m_type; } } public String Noise() { switch (m_type) { case AnimalType.Cat: return "Meow"; case AnimalType.Dog: return "Bark"; case AnimalType.Wolf: return "Howl"; case AnimalType.Bear: return "Growl"; default: throw new InvalidOperationException("Unrecognized AnimalType: ", m_type); } } }
[Java] 스프링에서 Oracle의 INSERT 구문에서 생성된 sequence 가져오기
Oracle 11g에서 INSERT 구문에서 테이블에 데이터를 저장한 후 새로 생성된 sequence를 다음과 같은 방법으로 얻어올 수 있다.
(환경 : Oracle 11g + Spring 3.5 + Java 6)
INSERT phrase and CREATE SEQUENCE
데이터를 저장하기 위해 사용하는 SQL은 다음과 같다.
static final String INSERT_ALRM_LOG =
"INSERT INTO LOG (LOG_SEQ_NO, MESSAGE) “ +
“VALUES (LOG_SEQ.NEXTVAL, :MESSAGE)”;
LOG_SEQ는 다음과 같이 생성할 수 있다.
CREATE SEQUENCE LOG_SEQ
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
Oracle에서 sequence의 다음 증가값을 얻기 위해서는 NEXTVAL 명령어를 사용하고, 현재값을 얻기 위해서는 CURRVAL 명령어를 사용한다.
SELECT LOG_SEQ.NEXTVAL FROM DUAL;
SELECT LOG_SEQ.CURRVAL FROM DUAL;
Spring에서 데이터 저장 및 생성된 키값 얻기
아래의 3개 클래스를 사용하여 INSERT 구문에서 새로 생성된 LOG_SEQ의 값을 얻는 로직을 완성한다.
- org.springframework.jdbc.core.namedparam.MapSqlParameterSource
- org.springframework.jdbc.support.GeneratedKeyHolder
- org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
MapSqlParameterSource paramSource = new MapSqlParameterSource();
paramSource.addValue("MESSAGE", “테스트 입력 메시지”, Types.VARCHAR);KeyHolder keyHolder = new GeneratedKeyHolder();
int affectedRowCount = jdbcTemplate.update (
INSERT_LOG, paramSource,
keyHolder,
new String[]{ "LOG_SEQ" });long generatedKey = keyHolder.getKey().longValue();
update 메서드는 다음과 같이 정의 되어 있다.
public int update (
String sql,
SqlParameterSource paramSource,
KeyHolder generatedKeyHolder,
String[] keyColumnNames) throws DataAccessException
- String[] keyColumnNames 테이블의 키 컬럼명을 문자열 배열형태로 지정한다.
- KeyHolder generatedKeyHolder 문자열 배열 keyColumnNames에 지정한 키값에서 새로 생성된 키값을 얻을 수 있는 객체.
생성된 키값은 다음의 메서드를 사용하여 얻을 수 있다.
- 생성된 데이터가 1 건이고, 생성된 키값이 sequence처럼 숫자형태의 1개인 경우
long longKey = keyHolder.getKey().longValue();
- 생성된 데이터가 n 건이고, 이 때 생성된 키가 n개 인 경우
List<<Map><String, Object>> keyList = keyHolder.getKeyList();
- 생성된 데이터가 1 건이지만, 이때 생성된 키가 n개인 경우
Map<String, Object> keyMap = keyHolder.getKeys();
[Java] How to convert String to Date
Converting String to Date.
String str = “2012-04-12”;
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = df.parse(str);String str = “12/04/2012”;
SimpleDateFormat df = new SimpleDateFormat(“dd/MM/yyyy”);
Date date = df.parse(str);
Pattern letters for date format.
Letter | Date or Time Component | Presentation | Examples |
G | Era designator | Text | AD |
y | Year | Year | 1996; 96 |
M | Month in year | Month | July; Jul; 07 |
w | Week in year | Number | 27 |
W | Week in month | Number | 2 |
D | Day in year | Number | 189 |
d | Day in month | Number | 10 |
F | Day of week in month | Number | 2 |
E | Day in week | Text | Tuesday; Tue |
a | Am/pm marker | Text | PM |
H | Hour in day (0-23) | Number | 0 |
k | Hour in day (1-24) | Number | 24 |
K | Hour in am/pm (0-11) | Number | 0 |
h | Hour in am/pm (1-12) | Number | 12 |
m | Minute in hour | Number | 30 |
s | Second in minute | Number | 55 |
S | Millisecond | Number | 978 |
z | Time zone | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | Time zone | RFC 822 time zone | -0800 |
[Oracle] Oracle sql hint
Just refer this page => http://such.egloos.com/tb/1472596
[Oracle] Oracle 테이블별 index 정보 조회
Oracle 데이터베이스에서 사용자 테이블 정보 및 index 정보를 조회하는 sql.
– owner별 테이블명, row count 및 row 평균 길이 정보 조회
select table_name, num_rows, avg_row_len
from all_tables
where owner = ‘사용자아이디’
and tablespace_name in (‘사용자테이블스페이스명1’, ‘사용자테이블스페이스명2’)
and num_rows > 0
order by num_rows desc;
– owner별 테이블의 테이블명, index명, index의 column명 정보 조회
select C.table_name, C.index_name, C.column_name, C.column_position, T.num_rows
from all_ind_columns C,
(select table_name, num_rows
from all_tables
where owner = ‘사용자아이디’
and tablespace_name in (‘사용자테이블스페이스명1’, ‘사용자테이블스페이스명2’)
and num_rows > 0) T
where C.table_name = T.table_name
order by T.num_rows desc, C.table_name, C.index_name, C.column_position;
[Android]Menu events
onCreateOptionsMenu
- Trigged the first time an Activity’s menu is displaed
- Can Define a menu for an Activity
- Menu.add() method
- Menu.addSubMenu() method
- Can use Menu resource in Xml file
- MenuInflator.inflate() method
onOptionsItemSelected
- MenuItem.getItemId() method and R.id.xxx
- When the menu item selected
onPrepareOptionsMenu
- Can modify a Menu based on an application’s current state
onCreateContextMenu
- Can define a Context Menu
- registerForContextMenu(view) : Can register Activity-specific Context Menu for an Activity
- Can use Menu resource in Xml file
- MenuInflator.inflate() method
onContextItemSelected
- When the context menu item selected