2009. 9. 21. 14:40

[오라클]날짜 연산

SELECT /* 오늘날짜 시분초 포함 */
TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 오늘날짜 00시 00분 00초 */
TO_CHAR(TRUNC(SYSDATE),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 오늘날짜 00시 00분 00초 위와 동일*/
TO_CHAR(TRUNC(SYSDATE,'DD'),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 이번달 1일 00시 00분 00초 */
TO_CHAR(TRUNC(SYSDATE,'MON'),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 올해 1월 1일 00시 00분 00초 */
TO_CHAR(TRUNC(SYSDATE,'YEAR'),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 올해 1월 1일 00시 00분 00초 */
TO_CHAR(TO_DATE('2002','YYYY'),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 2월 1일 00시 00분 00초 */
TO_CHAR(TO_DATE('200202','YYYYMM'),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 2월 2일 00시 00분 00초 */
TO_CHAR(TO_DATE('20020202','YYYYMMDD'),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

SELECT /* 2월 2일 00시 00분 01초 */
TO_CHAR(TO_DATE('20020202','YYYYMMDD')+1/68400,'YYYY/MM/DD HH24:MI:SS') FROM DUAL;

TO_CHAR(TO_DATE('20020202','YYYYMMDD')+1/24/60/60,'YYYY/MM/DD HH24:MI:SS')FROM DUAL;

SELECT /* 2월 2일 00시 00분 00초 -> 한달뒤*/
TO_CHAR(ADD_MONTHS(TO_DATE('20020202','YYYYMMDD'),1),'YYYY/MM/DD HH24:MI:SS') FROM DUAL;
 
만약  분, 초 단위로 날짜 연산을 하고자 한다면 다음과 같이 해야 겠다.


(1) 현재 날자에서 하루를 빼고 싶다고 하면
    select sysdate - 1 from dual;
(2) 1시간을 빼고 싶으면
    select sysdate - 1/24 from dual;
(3) 1분을 빼고 싶으면
    select sysdate - 1/24/60 from dual;
(q) 1초를 빼고 싶은면
    select sysdate - 1/24/60/60 from dual;

날짜형 함수

    SYSDATE : 현재 시스템의 날짜 및 시간을 구함
    LAST_DAY : 지정한 날짜의 해당 월의 마지막 날짜를 구함
    MONTHS_BETWEEN : 두 날짜 사이의 개월 수를 구함
    ADD_MONTHS : 지정한 날짜로부터 몇 개월 후의 날짜를 구함
    ROUND : 날짜에 대한 반올림
    TRUNC : 날짜에 대한 버림

    SYSDATE : SYSDATE → 10-MAY-99
    LAST_DAY(날짜값) : LAST_DAY('17-FEB-98') → 28-FEB-98
    MONTHS_BETWEEN(날짜값1, 날짜값2) : MONTHS_BETWEEN('26-APR-97','22-JUL-95') → 21.1290323
    ADD_MONTHS(날짜값, 숫자값) : ADD_MONTHS('22-JUL-95',21) → 22-APR-97
    ROUND(날짜값, 자리수) : 현재 날짜가 1999년 5월 10일이라고 가정하자.
                         ROUND(SYSDATE,'MONTH') → 01-MAY-99
    TRUNC(날짜값, 자리수) : 현재 날짜가 1999년 5월 10일이라고 가정하자.
                         TRUNC(SYSDATE,'YEAR') → 01-JAN-99

 날짜에 대한 산술연산

    날짜 + 숫자 : 날짜 특정한 날로부터 몇일 후의 날짜 계산
    날짜 - 숫자 : 날짜 특정한 날로부터 몇일 전의 날짜 계산
    날짜 - 날짜 : 숫자 두 날짜 사이의 차이를 숫자로 계산
 
변환형 함수

    TO_CHAR : 숫자나 날짜를 문자열로 변환
    TO_NUMBER : 문자를 숫자로 변환
    TO_DATE : 문자를 날짜로 변환

      - TO_CHAR에서 숫자를 문자로 변환시에 형식에 사용되는 요소
          9 : 일반적인 숫자를 나타냄
          0 : 앞의 빈자리를 0으로 채움
          $ : dollar를 표시함
          L : 지역 통화 단위(ex \)
          . : 소숫점을 표시함
          , : 천단위를 표시함

      - TO_CHAR에서 날짜를 문자로 변환시에 형식에 사용되는 요소
          SCC : 세기를 표시 S는 기원전(BC)
          YEAR : 연도를 알파벳으로 spelling
          YYYY : 4자리 연도로 표시
          YY : 끝의 2자리 연도로 표시
          MONTH : 월을 알파벳으로 spelling
          MON : 월의 알파벳 약어
          MM : 월을 2자리 숫자로 표시
          DAY : 일에 해당하는 요일
          DY :  일에 해당하는 요일의 약어
          DDD,DD,D : 연도,월,일 중의 날짜를 숫자로 표시
          HH , HH24 : (1-12) , (0-23)중의 시간을 표시
          MI : 분을 표시
          SS : 초를 표시
          AM(A.M.),PM(P.M.) : 오전인지 오후인지를 표시
 
        숫자를 문자로 변환 : TO_CHAR(350000,'$999,999')→ $350,000
        숫자를 날짜로 변환 : TO_CHAR(SYSDATE,'YY/MM/DD')→ 95/05/25

        TO_DATE(문자값, ‘형식’) : TO_DATE('10 SEPTEMBER 1992','DD MONTH YYYY')→10-SEP-92
        TO_NUMBER(문자값) : TO_NUMBER('1234')→ 1234
[출처] 오라클 날짜 연산|작성자 코난

2009. 9. 18. 11:34

네이트온,메신저등이 차단되어도 접속하게 해주는 Vidalia Bundle


Vidalia Bundle는 학교, 회사등에서 네이트온, MSN등의 메시저가 차단되었거나 특정사이트가 차단 되었을 경우에 Proxy 서버를 사용하여 메신저나 사이트를 사용하게 하는 프로그램입니다.

일반적으로 차단된것을 우회해서 들어가는 방법은 Proxy 서버를 이용한 차단된 사이트를 접속하는 방법입니다
.

하지만 프록시서버를 찾아서 연결하는것은 그리 쉬운방법도 아니고 아무나 연결할 수 있는 프리 프록시 서버는 더욱 찾기는 어렵습니다
.

그러한 프록시서버로의 연결을 프로그램설치와 사용할 프로그램에서의 설정변경으로 사용하게 하는것이 Vidalia Bundle입니다.

vidalia-bundle-0.2.0.34-0.1.10.exe



Vidalia Bundle
을 사용하면 공개 프록시를 사용하는 것 보다 다음과 같은 장점이 있습니다.
1.
비교적 속도가 빠르다
.
2.
일일이 프록시 서버 주소를 찾아다닐 필요가 없다
.
3.
접속 할때마다 서버가 바뀌기 때문에, 추적이 거의 불가능하며, 보안성이 뛰어나다
.
4.
무료이며, 아무런 요구사항이 없다
.


첨부된 파일을 받으시고 실행해서 NEXT버튼만 클릭해서 프로그램을 설치를 하시면 바로 프로그램은 설정이 완료됩니다
.

프로그램실행여부는 트레이에 양파모양의 아이콘이 있으면 실행 된 상태입니다
.

Vidalia Bundle
이 시작되면 프로그램에서 설정을 해주시면됩니다.


Vidalia
설정 패널



네이트온 메신저 v3.7.9.2 기준
설정->환경설정->연결(방화벽) 에서 아래와 같이 설정을 해주시면 됩니다.

네이트온 프록시 포트설정



MSN
메신저 v8.5 기준
도구->옵션->연결 에서 아래와 같이 설정을 해주시면 됩니다.

MSN 프록시 포트설정


Internet Explorer 7.0
기준
도구->인터넷옵션->연결->LAN설정 버튼클릭 에서 아래와 같이 설정을 해주시면 됩니다.

IE 인터넷 옵션

 

IE 랜설정

 

Internet Explorer 7.0에서 프록시 설정


Firefox(
파이어폭스)기준
파이어폭스의 경우에는 복잡한 설치과정이 필요없습니다.
설치시 파이어폭스 플러그인이 설치됩니다
.
사용을 하려면 상태바의 Tor Disable 을 클릭하시면 Tor Enabled 로 전환이 되면서 사용이 가능합니다
.
사용을 중지하려면 반대로 하시면됩니다.

파이어폭스에서 Tor 활성화


웹브라우져등 HTTP프로토콜을 사용한는 프로그램은 8118 포트를 쓰면되고 네이트온이나 MSN등의 직접연결하는 어플리게이션등은 9050 포트를 사용하면 됩니다.

프록시를 사용하면 다이렉트로 연결되는 것보다는 속도는 조금 느립니다
.

하지만 네이트온등의 메신저의 사용에는 크게 불편함이 없습니다
.

인터넷이 차단되지 않은 상태에서 사용 할 수 있다는 장점이 있습니다
.

네이드온의 경우는 위의 설정으로 접속이 잘되는것으로 알고 있습니다.
하지만 MSN의 경우는 MSN만 설정을 해서는 안되는 경우가 있습니다.
이경우에는 MSN IE설정을 다 바꾸어주셔야 사용이 가능합니다.

2009. 9. 15. 17:15

[Oracle] SELECT FOR UPDATE NOWAIT | WAIT 기능 소개


SELECT FOR UPDATE NOWAIT | WAIT 기능 소개
=========================================

PURPOSE
-------
오라클 데이터베이스에서는 선택된 행들에 대하여 배타적인 LOCK을 설정할 수
있는 기능인 FOR UPDATE 구문을 제공하고 있다.

여기서는 FOR UPDATE 구문의 전반적인 개관과 9i 신기능으로 소개된 WAIT로
TIMEOUT을 설정하는 방법을 아래와 같이 살펴본다.

1. FOR UPDATE with no option
2. FOR UPDATE NOWAIT(= WAIT 0)
3. FOR UPDATE WAIT integer (0 ~ 4294967295, second)
4. FOR UPDATE OF

Explanation
-----------
1. FOR UPDATE with no option
- 이 경우 오라클은 LOCK을 획득하기까지 무한정 기다린다.


2. FOR UPDATE NOWAIT[= WAIT 0]
- LOCK을 획득하지 못하면 ORA-00054와 함께 바로 실패한다(Example I).
  (FOR UPDATE WAIT 0 도 같이 동작한다)

Example I

-- 모든 예제는 SESSION1이 이미 LOCK을 점유하고 있는 상황을 가정 --

V901:SESSION2> select ename  from scott.emp where empno=7900 for update nowait;
select ename  from scott.emp where empno=7900 for update nowait
                         *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified

V901:SESSION2> select ename  from scott.emp where empno=7900 for update wait 0;
select ename  from scott.emp where empno=7900 for update wait 0
                         *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified


3. UPDATE WAIT integer(0 ~ 4294967295, second)

- WAIT 다음 주어지는 정수 만큼 동안 LOCK을 획득하기 위해 재시도한다.
  그러나 주어진 시간동안 LOCK을 획득하지 못하면 ORA-30006와 함께
  해당 SQL문은 실패한다(Example I).
  WAIT 다음에 integer 설정하지 않거나 integer의 최대값(4294967295)을
  초과하는 값을 설정하면 ORA-30005 에러를 만나게 된다(Example II,III).

Example I

V901:SESSION2> select ename  from scott.emp where empno=7900 for update wait 5;
select ename  from scott.emp where empno=7900 for update wait 5
                         *
ERROR at line 1:
ORA-30006: resource busy; acquire with WAIT timeout expired


Example II

V901:SESSION2> select ename  from scott.emp where empno=7900 for update wait;
select ename  from scott.emp where empno=7900 for update wait
                                                            *
ERROR at line 1:
ORA-30005: missing or invalid WAIT interval

Example III

V901:SESSION2>  select ename  from scott.emp for update wait 4294967296;

ERROR at line 1:
ORA-30005: missing or invalid WAIT interval


4. FOR UPDATE OF

- FOR UPDATE 구문은 FROM 절에 기술된 복수개의 테이블의 해당행에 모두
  LOCK을 설정한다(Example I)
  이 때 OF 를 기술함으로 하여 특정 TABLE의 행에만 LOCK을 설정할 수 있다(Example II)

* 주의
- FROM 절에 DUMMY로 열거된 TABLE인 경우(즉 JOIN 조건이 없어서 Cartesian product로 연산되는 경우),
  OF 절이 없다면 모든 TABLE, 행에 LOCK이 설정된다(Example III)

Example I

SELECT empno, sal, comm
    FROM emp, dept
    WHERE job = 'CLERK'
        AND emp.deptno = dept.deptno
        AND loc = 'NEW YORK'
    FOR UPDATE;

COL OBJECT_NAME FORMAT a20
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
    FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
    WHERE A.SID=B.SID
        AND B.ID1=C.OBJECT_ID
        AND B.TYPE='TM'
        AND C.OBJECT_NAME IN ('EMP','DEPT');


       SID    SERIAL# TYPE OBJECT_NAME
---------- ---------- ---- --------------------
        16       1184 TM   DEPT
        16       1184 TM   EMP

Example II

SELECT empno, sal, comm
    FROM emp, dept
    WHERE job = 'CLERK'
        AND emp.deptno = dept.deptno
        AND loc = 'NEW YORK'
    FOR UPDATE OF emp.sal;

COL OBJECT_NAME FORMAT a20
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
    FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
    WHERE A.SID=B.SID
        AND B.ID1=C.OBJECT_ID
        AND B.TYPE='TM'
        AND C.OBJECT_NAME IN ('EMP','DEPT');


       SID    SERIAL# TYPE OBJECT_NAME
---------- ---------- ---- --------------------
        16       1184 TM   EMP

Example III

SELECT empno, sal, comm
    FROM emp, dept
    FOR UPDATE;


COL OBJECT_NAME FORMAT a20
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
    FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
    WHERE A.SID=B.SID
        AND B.ID1=C.OBJECT_ID
        AND B.TYPE='TM'
        AND C.OBJECT_NAME IN ('EMP','DEPT');

       SID    SERIAL# TYPE OBJECT_NAME
---------- ---------- ---- --------------------
        16       1184 TM   DEPT
        16       1184 TM   EMP


Reference Documents
-------------------
Oracle9i SQL Reference
Release 2 (9.2)
Part Number A96540-01
    
from www.oracle.co.kr