본문 바로가기

Dev::DB/Oracle

(6)
ODP.NET 에서 Parameter 사용할 때.... ODP.NET 을 사용할 때, 조금만 해보다 보면 뭔가 이상한 걸 느낄 수 있다. 쿼리에 대해서 이상한 결과가 나온다거나 무슨 데이터 타입이 맞지 않는다는 에러나...등등.... 그래서 TOAD 나 ADO.NET 으로 해서 해보면 아주 정확하게 원하는 결과가 나온다. 조금만 보다 보면 파라매터를 사용하는데 뭔가....ㅡㅡ;;; 파라매터가 지정한 이름으로 매칭되는 것이 아니라...삽입된 순서에 따라서 매칭된다는 사실이다. OLE 처럼 ? 로 파라매터를 쓰는것도 아닌데..순서라니...ㅡㅡ; 찾아보니...기본이 순서로 지정하고 별도의 설정을 했을 때 이름으로 매칭이 된다고 한다. OracleCommand 에 보면 BindByName 이라는 프로퍼티를 true 로 하면 원하는대로 동작된다. 왜 대체...순서를 ..
분할 조회 쿼리 아시는 분이 유용한 쿼리라고 하나를 알려주셨다. 조회시 건별로 짤라서 가져올 수 있는데...굉장히 유용하게 사용할 수 있을 듯 싶다.SELECT * FROM (SELECT ROWNUM RNUM, A.* FROM ( SELECT * FROM TESTTBL ORDER BY SEQ) A WHERE ROWNUM = 25 /*시작 ROWNUM*/
START WITH ~ CONNECT BY ~ 에서 말단 Leaf Start With ~ Connect By ~ 를 어느정도 사용 하다보니 나오는 데이터의 Tree 구조에서 Leaf 를 찾아야 하는 하는 경우가 있었다. 10g 이상에서는 CONNECT_BY_ROOT SYS_CONNECT_BY_PATHCONNECT_BY_ISLEAF 라는 것을 제공하여 SELECT LPAD(LEVEL, LEVEL*3) AS TREE, A.* , CONNECT_BY_ISLEAF AS IsLeaf FROM TreeTable A START WITH A.PCODE = '@'AND USEFLAG = '1' CONNECT BY A.PCODE = PRIOR A.CODE AND USEFLAG = '1' ORDER SIBLINGS BY DISPSEQ ASC CONNECT_BY_ISLEAF 를 통해서 1 ..
달력 SQL WITH T AS ( SELECT TO_DATE('200811','yyyymm') YM FROM DUAL ) SELECT * FROM ( SELECT MIN (DECODE (TO_CHAR (YM + LEVEL - 1, 'd'), '1', LEVEL)) SUN, MIN (DECODE (TO_CHAR (YM + LEVEL - 1, 'd'), '2', LEVEL)) MON, MIN (DECODE (TO_CHAR (YM + LEVEL - 1, 'd'), '3', LEVEL)) TUE, MIN (DECODE (TO_CHAR (YM + LEVEL - 1, 'd'), '4', LEVEL)) WED, MIN (DECODE (TO_CHAR (YM + LEVEL - 1, 'd'), '5', LEVEL)) THU, MIN ..
Oracle 계층적 트리구조 START WITH ~ CONNECT BY ~ ORDER SIBLINGS BY > TreeTable > SELECT LPAD(LEVEL, LEVEL*3) AS TREE, A.* FROM TreeTable A START WITH A.PCODE = '@'AND USEFLAG = '1' CONNECT BY A.PCODE = PRIOR A.CODE AND USEFLAG = '1' ORDER SIBLINGS BY DISPSEQ ASC > Result
ROW 를 COL 으로 변환 최근들어 SQL를 해보면서 [TEST_TABLE] SEQNO TFLAG TCODE TNAME 1 2 1 2TC1 2TN1 2 2 2 2TC2 2TN2 3 5 1 5TC1 5TN1 4 5 2 5TC2 5TN2 5 7 2 7TC2 7TN2 하나의 키(SEQNO)를 기준으로 여러개의 Row가 나올 때 조건에 따라서 Row를 각 키의 컬럼으로 돌려야 할 경우가 종종 생겼다. SEQNO TCODE1 TNAME1 TCODE1 TNAME2 1 2 2TC1 2TN1 2TC2 2TN2 2 5 5TC1 5TN1 5TC2 5TN2 3 7 7TC2 7TN2 이런 방법으로 해주면 쉽게 바꿀 수 있다. SELECT SEQNO, MIN(DECODE(TFLAG, 1, TCODE)) TCODE1, MIN(DECODE(TFLAG, 1,..