2009/12/30 21:30
sysdate를 년월일시분초까지 표시할때
select TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') AS REQ_DTIME from dual

년월일시분초 데이터가 char로 저장되어있는 컬럼을 읽어 들일경우
REQ_DTIME <-- 이 컬럼이 char(14) 인 경우
TO_CHAR(TO_DATE(REQ_DTIME,'YYYYMMDDHH24MISS'),'YYYY.MM.DD HH24:MI:SS')

'YYYYMMDDHH24MISS' <-- 이 문장 가운데에 있는 24라는것이 시간 표시 기준을 명명하는건데요
12시간 기준으로 표시하고 싶으시면 'YYYYMMDDHH12MISS' 라고 하시면 됩니다
Posted by 아방
2009/10/30 16:50
select r_constraint_name, table_name, constraint_name
from all_constraints
where constraint_type in ('R')
  and r_constraint_name like '%LM_LAWSUIT_GRADE%'


 '%LM_LAWSUIT_GRADE%'
에다가 마스터 테이블 명 넣으면 됨
Posted by 아방
2009/02/18 14:17

 

사용자 삽입 이미지

 

낯선 곳 낯선 사람들

그리고 세상의 구경꾼으로의 가벼운 혼자 됨

새로운 세계와 감각

그것들이 제공하는 새로운 시계

지나온 일들과 다가올 일들 사이의 얇지만 튼튼하고 질거운 경계

시간을 이동할 수 없는 인간이 가장 넓은 범위의 자유를 가질 수 있는 건

다른 공간으로의 이동을 경험하는 순간이 아닐까?

그래서 여행은 인생을 가장 길게 사는 방법일지도 모르겠다.

그리고 가끔은 그 확장된 삶의 경계에서

삶의 추억과 미래의 가능성의 언저리에서

사람들은 자신의 새로운 운명을 만나게 되기도 한다.

꽤 짙은 농도를 지닌 특별한 만남을 말이다.

 

-‘스타의 연인’4회 -

 

사용자 삽입 이미지
사용자 삽입 이미지

그때 난 우리의 차이가

쭉 걸어온 인생의 풍경이

삶을 지탱해준 가치들이

얼마나 다른지 알고 있었다.

그때 난 선을 넘는 방법을

진짜가 되는 것을 배워가고 있었다.

그때 난 내 가슴이 꽉 메여 올 때

내 눈에 뜨거운 눈물이 맺힐 때

목이 아플 정도로 먹먹한 슬픔이 가득 찰 때

살아있는 매 순간마다

누굴 사랑하고 있는지도 알고 있었다.

너를 사랑한다는 것을 깨닫고 있었다.

 

- 이마리의 사진집에 들어간 김철수의 글 -

 

사용자 삽입 이미지




정말 오랫만에 멋진 드라마를 보았다.. 마치 애절하고도 아름다운 로맨스 영화를 본듯한 여운
이마리 사진첩에 적은 글귀 하나에 펑펑 울고 말았던..
안나오는 시청률에도 불구하고 정성스레 마지막까지 최선을 다해준 제작진&연기자분들에게 작은 감사를 표한다.
Posted by 아방
2009/01/06 21:21

선임이 작성한 프로시져 안에 bulk collect 라는 난생 처음 보는 구문이 있길래 검색을 한번 해보았다..
아래의 설명으로는 사용과 쓰임에 납득이 잘 안가지만.. 머 일단 퍼놓는게 좋을듯 하여 퍼 놓는다





SELECTS문에서 한번에 대량의 레코들 취득 하는 경우, BULK COLLECT구를 사용하면

한번에 여러개의 레코드를 취득할수 있으므로 퍼포먼스 향상


Patten 1

-------------------------------------------------------------------------------

DECLARE
  TYPE empno_tbl_type IS TABLE OF EMP.EMPNO%TYPE INDEX BY BINARY_INTEGER;
  empno_tbl  empno_tbl_type;
BEGIN
  SELECT EMPNO BULK COLLECT INTO empno_tbl FROM EMP;
  IF empno_tbl.COUNT > 0 THEN
    FOR i IN empno_tbl.FIRST..empno_tbl.LAST LOOP
      UPDATE EMP SET SAL = SAL * 1.05 WHERE EMPNO = empno_tbl( i );
    END LOOP;
  END IF;
END;
/


Patten 2

-------------------------------------------------------------------------------

DECLARE
  TYPE emp_tbl_type IS TABLE OF EMP%ROWTYPE INDEX BY BINARY_INTEGER;
  emp_tbl  emp_tbl_type;
BEGIN
  SELECT * BULK COLLECT INTO emp_tbl FROM EMP;
  IF emp_tbl.COUNT > 0 THEN
    FOR i IN emp_tbl.FIRST..emp_tbl.LAST LOOP
      UPDATE EMP SET SAL = SAL * 1.05 WHERE EMPNO = emp_tbl( i ).EMPNO;
    END LOOP;
  END IF;
END;
/


Patten 3 커서 이용

-------------------------------------------------------------------------------

DECLARE
  CURSOR emp_cur IS
    SELECT * FROM EMP;
  TYPE emp_tbl_type IS TABLE OF emp_cur%ROWTYPE INDEX BY BINARY_INTEGER;
  emp_tbl  emp_tbl_type;
BEGIN
  OPEN emp_cur;
  FETCH emp_cur BULK COLLECT INTO emp_tbl;
  CLOSE emp_cur;
  IF emp_tbl.COUNT > 0 THEN
    FOR i IN emp_tbl.FIRST..emp_tbl.LAST LOOP
      UPDATE EMP SET SAL = SAL * 1.05 WHERE EMPNO = emp_tbl( i ).EMPNO;
    END LOOP;
  END IF;
END;
/


즉,커서를 이용할시 취득할 데이터 수가 많을듯하면 Limit를 사용하여 일정 레코드 단위로

Fetch하는 것이 성능면에서 좋다.


FETCH emp_cur BULK COLLECT INTO emp_tbl LIMIT 100;

[출처] [PL/SQL] BULK COLLECT구문을 이용한 검색처리 고속화|작성자 hirokorea

Posted by 아방
2008/05/16 15:41

자바 스크립트 함수 slipt()은 문자 한글자를 파라미터로 받아서

문자열 파라미터로 받는 스플릿 함수를 만들어 보았다


// stringSlipt( 대상문자열, 스플릿기준문자열 )
function stringSplit( inputStr, indexStr ) {
  var txt1 = inputStr;
  var arr1 = new Array();
  while( txt1.indexOf(indexStr) != -1 ) {
   arr1[arr1.length] =  txt1.substring(0,txt1.indexOf(indexStr)) ;
   txt1 = txt1.substring( txt1.indexOf(indexStr)+2, txt1.length ) ;
  }
  arr1[arr1.length] = txt1;
  return arr1;
 
 }

사용한 예제

<HTML>
<HEAD>
 <script language="javascript">
 function test1()
    {
        var txt1 = "장동건\r\n은지원\r\n김원준\r\n타블로";
  var arr1 = new Array();
  arr1 = stringSplit(txt1, "\r\n");
  for ( var i = 0; i < arr1.length; i++ ) {
   alert( arr1[i] );
  }
    }

 function stringSplit( inputStr, indexStr ) {
  var txt1 = inputStr;
  var arr1 = new Array();
  while( txt1.indexOf(indexStr) != -1 ) {
   arr1[arr1.length] =  txt1.substring(0,txt1.indexOf(indexStr)) ;
   txt1 = txt1.substring( txt1.indexOf(indexStr)+indexStr.length, txt1.length ) ;
  }
  arr1[arr1.length] = txt1;
  return arr1;
 
 }
 </script>
</HEAD>

<BODY>
 <input type="button" onclick="test1()"/>
</BODY>
</HTML>

Posted by 아방
2008/04/24 15:52
union과 union all의 차이점을

굳이 말로 표현 안해도 한번에 이해하게 만드는 쿼리 !!

select 'asdf' from dual
 union
 select 'asdf' from dual
 
 select 'asdf' from dual
 union
 select 'qwer' from dual
 
 
 select 'asdf' from dual
 union all
 select 'asdf' from dual


Posted by 아방
2008/03/24 15:25
03.29 한화:롯데 대전 14시 00분
03.30 한화:롯데 대전 14시 00분
04.01 롯데:SK 사직 18시 30분
04.02 롯데:SK 사직 18시 30분
04.03 롯데:SK 사직 18시 30분
04.04 LG:롯데 잠실 18시 30분
04.05 LG:롯데 잠실 14시 00분
04.06 LG:롯데 잠실 14시 00분
04.08 삼성:롯데 대구 18시 30분
04.09 삼성:롯데 대구 18시 30분
04.10 삼성:롯데 대구 18시 30분
04.11 롯데:KIA 사직 18시 30분
04.12 롯데:KIA 사직 14시 00분
04.13 롯데:KIA 사직 14시 00분
04.15 롯데:두산 사직 18시 30분
04.16 롯데:두산 사직 18시 30분
04.17 롯데:두산 사직 18시 30분
04.18 우리:롯데 목동 18시 30분
04.19 우리:롯데 목동 14시 00분
04.20 우리:롯데 목동 14시 00분
04.22 SK:롯데 문학 18시 30분
04.23 SK:롯데 문학 18시 30분
04.24 SK:롯데 문학 18시 30분
04.25 롯데:삼성 사직 18시 30분
04.26 롯데:삼성 사직 14시 00분
04.27 롯데:삼성 사직 14시 00분
04.29 롯데:LG 사직 18시 30분
04.30 롯데:LG 사직 18시 30분
05.01 롯데:KIA 사직 18시 30분
05.03 KIA:롯데 광주 14시 00분
05.04 KIA:롯데 광주 14시 00분
05.05 KIA:롯데 광주 14시 00분
05.06 롯데:한화 사직 18시 30분
05.07 롯데:한화 사직 18시 30분
05.08 롯데:한화 사직 18시 30분
05.09 두산:롯데 잠실 18시 30분
05.10 두산:롯데 잠실 14시 00분
05.11 두산:롯데 잠실 14시 00분
05.13 롯데:삼성 사직 18시 30분
05.14 롯데:삼성 사직 18시 30분
05.15 롯데:삼성 사직 18시 30분
05.16 롯데:우리 사직 18시 30분
05.17 롯데:우리 사직 14시 00분
05.18 롯데:우리 사직 14시 00분
05.20 KIA:롯데 광주 18시 30분
05.21 KIA:롯데 광주 18시 30분
05.22 KIA:롯데 광주 18시 30분
05.23 SK:롯데 문학 18시 30분
05.24 SK:롯데 문학 14시 00분
05.25 SK:롯데 문학 14시 00분
05.27 롯데:한화 사직 18시 30분
05.28 롯데:한화 사직 18시 30분
05.29 롯데:한화 사직 18시 30분
05.30 우리:롯데 목동 18시 30분
05.31 우리:롯데 목동 14시 00분
06.01 우리:롯데 목동 17시 00분
06.03 롯데:두산 사직 18시 30분
06.04 롯데:두산 사직 18시 30분
06.05 롯데:두산 사직 18시 30분
06.06 롯데:SK 사직 17시 00분
06.07 롯데:한화 사직 17시 00분
06.08 롯데:SK 사직 17시 00분
06.10 두산:롯데 잠실 18시 30분
06.11 두산:롯데 잠실 18시 30분
06.12 두산:롯데 잠실 18시 30분
06.13 롯데:우리 사직 18시 30분
06.14 롯데:우리 사직 17시 00분
06.15 롯데:우리 사직 17시 00분
06.17 한화:롯데 대전 18시 30분
06.18 한화:롯데 대전 18시 30분
06.19 한화:롯데 대전 18시 30분
06.21 LG:롯데 잠실 17시 00분
06.22 LG:롯데 잠실 17시 00분
06.24 롯데:SK 사직 18시 30분
06.25 롯데:SK 사직 18시 30분
06.26 롯데:SK 사직 18시 30분
06.27 롯데:KIA 사직 18시 30분
06.28 롯데:KIA 사직 17시 00분
06.29 롯데:KIA 사직 17시 00분
07.01 삼성:롯데 대구 18시 30분
07.02 삼성:롯데 대구 18시 30분
07.03 삼성:롯데 대구 18시 30분
07.04 롯데:LG 사직 18시 30분
07.05 롯데:LG 사직 17시 00분
07.06 롯데:LG 사직 17시 00분
07.08 우리:롯데 목동 18시 30분
07.09 우리:롯데 목동 18시 30분
07.10 우리:롯데 목동 18시 30분
07.11 롯데:두산 사직 18시 30분
07.12 두산:롯데 사직 17시 00분
07.13 두산:롯데 사직 17시 00분
07.15 롯데:KIA 사직 18시 30분
07.16 롯데:KIA 사직 18시 30분
07.17 롯데:KIA 사직 18시 30분
07.18 LG:롯데 잠실 18시 30분
07.19 LG:롯데 잠실 17시 00분
07.20 LG:롯데 잠실 17시 00분
07.22 SK:롯데 문학 18시 30분
07.23 SK:롯데 문학 18시 30분
07.24 SK:롯데 문학 18시 30분
07.25 롯데:한화 사직 18시 30분
07.26 롯데:한화 사직 17시 00분
07.27 롯데:한화 사직 17시 00분
07.29 두산:롯데 잠실 18시 30분
07.30 두산:롯데 잠실 18시 30분
07.31 두산:롯데 잠실 18시 30분
08.05 롯데:우리 사직 18시 30분
08.06 롯데:우리 사직 18시 30분
08.07 롯데:우리 사직 18시 30분
08.08 삼성:롯데 대구 18시 30분
08.09 삼성:롯데 대구 17시 00분
08.10 삼성:롯데 대구 17시 00분
08.12 롯데:LG 사직 18시 30분
08.13 롯데:LG 사직 18시 30분
08.14 롯데:LG 사직 18시 30분
08.15 KIA:롯데 광주 17시 00분
08.16 KIA:롯데 광주 17시 00분
08.17 KIA:롯데 광주 17시 00분
08.19 한화:롯데 대전 18시 30분
08.20 한화:롯데 대전 18시 30분
08.21 한화:롯데 대전 18시 30분
08.22 롯데:삼성 사직 18시 30분
08.23 롯데:삼성 사직 17시 00분
08.24 롯데:삼성 사직 17시 00분
08.26 한화:롯데 대전 18시 30분
Posted by 아방
2008/03/22 16:47

number.toFixed(지정하고자 하는 자릿수 int);

ex)

<script type="text/javascript">

var num = 3.14;

// 소수점 이하 1자리로 강제로 출력
alert(num.toFixed(1));

아랫자리에서 반올림된다고함..
</script>

소수점 1자리까지 있는 문자를 Number 타입으로 변환 시켰더니 소수점 자릿수가 매우길게 나와서

이걸 줄이려다 간단한 명령어인 toFixed 발견 !

반올림 된다는 단점이 있으므로... 필요한 부분에서만 사용!

Posted by 아방
2008/03/12 10:23

1. not in ...

SELECT * FROM A WHERE a.key not in (SELECT b.key FROM B)

형태의 구문이며, B쪽을 먼저 access하여 b.key로 a.key에 공급자역할을 하는 서브쿼리로 쓰고 싶을 때 주로 사용합니다.


2. not exists ...

SELECT * FROM A WHERE not exists (SELECT * FROM B WHERE b.key = a.key)

형태의 구문이며, A쪽을 먼저 access하고 나서 a의 각 row들을 not exists로 조사하여 filtering하는 처리를 할 때 주로 사용합니다. 즉, B를 access하기 전에 A쪽의 전체범위가 먼저 access됩니다.

이 때의 서브쿼리는 공급자가 아닌 확인자역할만 해 줄 수 있습니다.


3. minus ...

SELECT key, col1, col2 FROM A

MINUS

SELECT key, col1, col2 FROM B

형태의 구문이며, 테스트 해 보면 아시겠지만 MINUS는 특성 상 sort와 중복제거 수행을 동반합니다.

그러므로 가장 이해하기는 간단하나 대용량에서는 사용 시 주의해야 합니다.

A나 B집합의 access대상이 대량인 경우 대량의 sort와 중복제거가 발생하므로 이들 처리에 많은 시간이 소요될 수 있는 쿼리입니다.


4. Outer + Null Check ...

SELECT * FROM A, B WHERE A.key = B.Key(+) AND B.Key IS NULL

형태의 구문이며, 위의 not in이나 not exists가 주로 Nested Loop Join 또는 Nested Loop Anti Join 방법을 수행하는데 비해 대용량의 경우 Hash Join이나 Merge Join을 유도하여 성능을 보장받을 수 있는 방법입니다.

단, 각 DBMS 마다 A LEFT OUTER JOIN B ON ~ , (*)등으로 아우터조인에 대한 표현은 약간 씩 다릅니다.


5. UNION ALL + Group count 또는 count() over() 분석함수 이용등 ...

SELECT *

FROM(

    SELECT a.*

        , COUNT(DISTINCT gbn) OVER(PARTITION BY key) AS cnt

        , COUNT(DISTINCT DECODE(gbn, 'A', 1)) OVER(PARTITION BY key) AS a_cnt

    FROM(

        SELECT 'A' AS gbn, key, col1, col2 FROM A UNION ALL

        SELECT 'B' AS gbn, key, col1, col2 FROM B

        ) a

    )

WHERE cnt < 2 AND a_cnt = 1

형태의 구문이며, UNION ALL은 MINUS와 달리 sort나 중복제거를 하지 않고 별다른 조인도 없기 때문에 양쪽집합에 scan할 마땅한 인덱스가 없거나 하는 상황에서 위력을 발휘할 수 있는 솔루션입니다.

GROUP BY와 COUNT 함수로도 위의 의미를 그대로 만들 수 있습니다...분석함수나 통계함수를 지원하지 않는 DBMS들은 COUNT() OVER() 대신 GROUP BY / COUNT로 변경해야겠지요...;


이외에도 구현할 수 있는 방법들이야 더 있겠지만, 대부분의 상황들에서 위의 예시들이 주로 많이 쓰인다는 것을 거듭 밝힙니다.



// 지식인에서 펌!

Posted by 아방
2008/02/29 11:22


지금 프로젝트에서 사용하는 common.js 에 있는 라운드 함수
function fcRoundAmt(amt, unit) {
  var after = eval(amt);
  after *= Math.pow(10, eval(unit));
        after = Math.round(after);
  after /= Math.pow(10, eval(unit));
  return after;
}

저게 있는지 모르고 내가 따로 만든 함수
function fcRound(rval, rlength) {
 var round_temp = rval % rlength;
 rval = rval - (rval % rlength );
 if ( round_temp >=  rlength/2 )  {
  rval += rlength;
 }
 return rval;
}

호출법
alert(fcRoundAmt(555555,-3));
alert(fcRound(555555,1000));

똑같은 기능을 하는 걸 참 다양한 방법으로 만들어 낼수 있다는거... 정말 재밌다니까 후훗
Posted by 아방