Archive

Posts Tagged ‘programming’

[Oracle] WITH clause in SELECT statement

August 24, 2012 Leave a comment

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_constsavg_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;

 

Categories: Oracle Tags: , ,

[Java] switch문 사용할 때 한번 만 더 생각해 보자..

July 23, 2012 Leave a comment

원문 : 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);
        }
    }
}
Categories: Java Tags: ,

[Java] 스프링에서 Oracle의 INSERT 구문에서 생성된 sequence 가져오기

July 20, 2012 Leave a comment

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의 값을 얻는 로직을 완성한다.

 

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();

Categories: Java Tags: ,

[Java] How to convert String to Date

July 17, 2012 Leave a comment

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
Categories: Java Tags: ,

[Oracle] Oracle sql hint

February 9, 2011 Leave a comment

Just refer this page =>  http://such.egloos.com/tb/1472596

Categories: Oracle Tags: , ,

[Oracle] Oracle 테이블별 index 정보 조회

February 9, 2011 Leave a comment

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;

Categories: Oracle Tags: ,

[Android]Menu events

February 6, 2011 Leave a comment

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

 

coding sample

sample

Categories: Android Tags: , ,