블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
05-19 00:00
 

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
 

최근에 올라온 글

최근에 달린 댓글


이번에 베트남 출장에 가면서 MS-SQL 에 대해서 많이 익히고 돌아왔습니다.

기본 설정으로 SQL Server 를 설치하고, Database 를 생성하였는데, 쿼리 분석기에서 한글이 정상적으로 입력이 되지 않는 것이였습니다. 임시로 문자열 앞에 N을 붙여 입력을 했었습니다.

하지만 별도의 방법이 따로 있었습니다. Database 를 생성하면서 Options 에 Collation 을 변경하는 것 입니다.

Collation: Korean_Wansung_CI_AI



처음에는 Collation 을 Korean_Wansung_CS_AI 로 만들었는데, 대소문자를 구분해버려서 원하는 결과가 나오지 않았습니다. 대소문자가 구분되지 않는 환경 구축을 위해서는 CI 옵션으로 설정해야 합니다.


Posted by 자수씨
, |

원래 오라클이랑은 별로 안 친해서 프로시저에 대해 잘 몰랐는데, 프로젝트 진행 중에 레거시의 요구사행 때문에 SYS_REFCURSOR 사용법을 알게되었습니다.


[프로시저]

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18
19

CREATE OR REPLACE PROCEDURE TEST.SP_OUT_CURSOR_EXAMPLE (

  V_PARAM IN VARCHAR2,
  V_OUT
OUT SYS_REFCURSOR)

IS

BEGIN

 

OPEN V_OUT FOR

SELECT

  'TEST' AS "제목",

  V_PARAM AS "내용"

FROM DUAL;

 

EXCEPTION

WHEN NO_DATA_FOUND THEN

 NULL;

WHEN OTHERS THEN

 RAISE;

END SP_OUT_CURSOR_EXAMPLE;

GO


03 라인에 보면 "OUT SYS_REFCURSOR" 라는 타입으로 정의되어 있습니다. 결과값을 담는 파라미터에 CURSOR 를 넘기는 것으로 생각하면 될 것 같습니다.

08~11 라인까지 자신이 넘기고 싶은 쿼리를 정의하여 07 라인을 통해 V_OUT 에 담습니다.

토드에서 아래와 같은 쿼리를 실행하여 위의 프로시저가 정상적으로 생성이 되었는지 확인합니다.
exec SP_OUT_CURSOR_EXAMPLE( 'param1', :C );


실행을 하게되면 변수에 대해 어떤 타입인지 선택을 하는 창이 뜹니다. Type을 Cursor로 선택하고 "OK"를 누릅니다.


아래와 같이 결과가 나오면 정상적으로 된 것입니다.



함수의 결과 값으로 SYS_REFCURSOR 를 넘길 수도 있다고 하니 알아두면 좋은 것 같습니다.




Posted by 자수씨
, |

정리용으로 작성합니다.
설치환경: Windows 7


1. 오라클 인스턴트 클라이언트 다운로드
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html
위 사이트에서 Instant Client Downloads 를 다운로드 받습니다.
제가 받을 때 최신버전은 Version 11.2.0.1.0 입니다.

Instant Client Package - Basic: All files required to run OCI, OCCI, and JDBC-OCI applications
 instantclient-basic-win32-11.2.0.1.0.zip (51,458,190 bytes)

다운받은 파일을 적당한 위치에 압축을 해제합니다.
(이번 포스팅에서는 C:\instantclient 에 압축 해제)


2. 환경변수 설정
환경 변수의 시스템 변수에 아래를 추가합니다.
TNS_ADMIN: C:\instantclient
Path: [기존 Path];%TNS_ADMIN% 
LNS_LANG: KOREAN_KOREA.KO16MSWIN949


3. tnsnames.ora 파일 설정
오라클 접속 정보를 가지고 있는 tnsnames.ora 파일을 설정합니다.
(%TNS_ADMIN% 경로에 새로 생성하여 넣어줍니다.)
TEST1 =
  (DESCRIPTION_LIST=
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.8)(PORT = 1521))
      )                                                               
    (CONNECT_DATA =
      (SID = TESTDB1)
    )
  )
)
TEST2 =
  (DESCRIPTION_LIST=
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.9)(PORT = 1521))
      )                                                               
    (CONNECT_DATA =
      (SID = TESTDB2)
    )
  )
)

위와 같이 설정을 하면 TEST1, TEST2 가 추가되며 IP와 SID는 보이는 대로 설정을 할 수 있습니다.


4. 토드 실행
TNS 탭에서 Database를 선택하고 user,password 를 설정하고 접속 버튼을 통해 데이터베이스에 접속을 할 수 있습니다.
Installed Clients 에 아까 처음에 내려받은 Instant Client - 11.2.0.1.0 이 보이네요~




이상 끝~



Posted by 자수씨
, |

현재 작업이 진행 중인 프로젝트 중에 DB링크로 레거시와 연동하는 부분이 있었습니다.

어찌저찌 잘 연결해서 사용을 하고 있었는데, 토요일 오후에 확인해보니 우리쪽 시스템이 동작을 하지 않았습니다.

그래서 로그를 확인하니...

Cause: java.sql.SQLException: ORA-12170: TNS: 접속 시간 초과가 발생함

레거시 연동하는 로직에서 위의 문제가 발생하여 우리쪽 DB의 작업들이 모두 동작이 되지 않았습니다.

시스템 - [우리DB ---- 레거시DB(link)]

이런식으로 묶여 있어 레거시DB가 죽어 있으면 우리쪽DB도 바보가 된다는 걸...
깨닿게 해준 레거시 시스템께 감사를 드려야겠네요.


시스템에서 레거시DB의 직접 커넥션을 열어 작업을 해야 할 것 같습니다.


Posted by 자수씨
, |

오라클에서 잘 돌아가는 쿼리를 알티베이스에 그대로 적용했더니 아래와 같은 오류가...

--- Check the SQL Statement (preparation failed).
--- Cause: java.sql.SQLException: [0]:Invalid use of host variables


원인은 함수에 prepared statement 의 파라미터가 들어갈 때 발생하는 오류였습니다.

지난번에 회사 동료분이 알려준 해결 방법은 cast 로 파라미터를 감싸주는 것 입니다.

예를 들어 함수이름이 f_new_number 이고,  파라미터가 type 이라면
...
f_new_number(?)
...
가 아닌
...
f_new_number(cast(? as varchar(20)))
...


일단은 잘 될거라고 믿어 의심치 않습니다.




Posted by 자수씨
, |

알티베이스는 "CLOB 의 데이터가 커서 여러번 I/O를 수행하기 때문에 하나의 트랜잭션으로 묶어 주기위해서 설정" 한다고 회사 분이 알려주셨습니다.

그래서 autocommit 을 풀어주어 SELECT 는 잘 됩니다.

근데 문제는 INSERT/UPDATE/DELETE 의 경우 소스 레벨에서 commit 을 해주어야 한다는게...

어떻게 SELECT 할 때만 자동으로 autocommit 을 풀고 갈 순 없을까요


후후후훔...

Posted by 자수씨
, |



단점은 CLOB 컬럼이 NOT NULL 일 경우 insert/update 가 되지 않습니다. 쳇...

SqlMapConfig.xml 에 아래 typeHandler 를 추가해주면 jdbcType 이 CLOB 인 컬럼들이 해당 속성을 타게 됩니다.
(resultMap 이나 parameterMap 으로 설정하는 것으로 테스트 해보았습니다. 그냥 되는지는 아직 검증이 되지 않았습니다.)
 <typeHandler javaType="String" jdbcType="CLOB" callback="kr.co.vicki.utils.ibatis.handler.AltibaseClobStringTypeHandler" />



흠.. 이게 무신 고생인지...


Posted by 자수씨
, |

Altibase 에서 제공해준 Altibase JDBC 를 통해서 CLOB 에 insert/update 를 하면 다음과 같은 오류 메시지가 떨어집니다.

[0]:Unable to insert(or update) NULL into NOT NULL column.

CLOB 로 잡은 컬럼이 NOT NULL 속성으로 잡혀 있었고, Altibase 에서 제공해준 PreparedStatement.setCharacterStream 를 이용하여 insert/update 를 하는 것이였습니다.

지푸라기라도 잡는 심정으로 해당 컬럼을 NULL 허용으로 잡고 다시 insert/update 를 해보니 정상적으로 동작하였습니다.

그 상태에서 바로 select 를 하여 ResultSet.getString 으로 값을 가져오게 되면 null 값만 가지고 옵니다.

select 도 Altibase 에서 제공해준 방식인 Clob.getCharacterStream 을 이용하여 가지고 오면 인코딩은 깨지긴 하였으나 값은 가지고 오는 것을 확인하였습니다.

JDBC 가 잘못된걸까요... 후우...

일단 해결책으로 보는 것은 CLOB 를 모두 NULL 허용으로 바꾸고 저희가 사용하는 iBatis 의 TypeHandler 를 이용하면 될 것으로 보입니다. 하지만 공수가 많이 드는 작업으로 생각이 되어...


Altibase 에서 제공해준 insert/update 방법입니다.


Altibase 에서 제공해준 select 방법입니다.



Posted by 자수씨
, |

예전에 조인된 테이블을 가지고 소팅을 할 경우 SELECT 로 감싼 후 order by 로 처리를 했습니다.
order by 절에 꼭 컬럼 명이 나와야 하는지 알았기 때문에...
(학교에서 안갈쳐 준거 같은데 -_ㅜ...)



어제 irc 채널에서 어떤분이 order by 숫자 가 무엇이냐고 질문을 하셨습니다.
어라... 처음 보는건데... 하면서 테스트를 해보았더니 해당 순서의 컬럼으로 정렬하는 것 이었습니다.
위의 쿼리를 변환하면 다음과 같습니다.



일단 아래와 같이 처리하면 처리속도도 빨라질 것 같네요.
근데 팀 내에서 저렇게 쓰시는 분을 못 본것 같은데 ㅋㅋㅋ 오라클에서만 되는건가....
여튼 질문하시는 분들을 통해 새로운 시각으로 많은 것을 배우는것 같습니다.



Posted by 자수씨
, |

[SQLite] Datatypes

Database / 2008. 11. 4. 17:45

구글 기어스로 오프라인 DB 를 구성하려고 하는데 SQLite 문법을 몰라서... 
테이블을 만들어보자꾸나~

내가 찾는 Date 형은 왜 눈에 안 띄는거지;;; ㄷㄷㄷ
Date는 그냥 date 였음... 크윽..

[원문]


Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백