본문 바로가기

Dev::DB

(7)
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*/
Toad 에서 Procedure 디버깅하기 Procedure 를 만들다 보면 디버깅이 절실히 필요하다. Toad 에서 디버깅이 가능하다. DB 접속 후 우선 Schema Browser 를 실행한다. Schema Browser 작업할 Package 나 Procedure 를 더블 클릭하면 선택한 항목에 대해서 별도 작업 창이 뜨게 된다. 여기서 이제 Break Point 를 찍어서 실행시키면 되는데 메뉴에 Debug 항목을 보면 Debug 시 필요한 작업에 대하 기능 및 단축키를 알 수 있다. 메뉴에서 Run (or 단축키 F11) 를 누르면 실행이 되고 그 뒤에 나오는 해당 Procedure의 파라매터를 입력하는 화면에서 파라매터의 값을 넣어주고 실행시켜주면 찍어놓은 Break Point 에서부터 Debug 메뉴에서 원하는 스텝대로 선택하여 디버깅..
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,..