본문 바로가기

oracle

ORACLE - KEEP(DENSE_RANK FIRST ORDER BY …) - A컬럼 기준 정렬 후 지정 된 행의 B컬럼값 추출하기 필드 a와 같은 record에 있는 필드 b의 값을 가져오는 방법. ex) 등록일이 제일 빠른 2013-09-05 의 같은 record에 있는 id값 가져오기 max(id) 와는 다른.... 등록일이 제일 늦은 2013-09-01 의 같은 record에 있는 id값 가져오기 min(id) 와는 다른 .... first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.. MIN(B) (DENSE_RANK FIRST ORDER BY A [ASC|DESC]) MAX(B) (DENSE_RANK LAST ORDER BY A [ASC|DESC]) 【형식】 집합함수 KEEP ( DENSE_RANK FIRST ORDER BY expr [DESC|ASC][NULL{FIRST|LAST}],...) 【.. 더보기
REGEXP_REPLACE 정규식 표현을 이용한 행변환 DATA 조작을 할때 구분자로 되어 있는 DATA를 조작하기는 쉽지 않다. 복잡하기도 하고 너무 길게 작성하면 가독성도 떨어진다. REGEXP_REPLACE 사용하여 간단히 작성해 보자! WITH T_TABLE AS (SELECT '1' AS ID ,'영희,철수,민수,정철,바보,멍충이,개똥,개똥똥' AS NM FROM DUAL UNION ALL SELECT '2' AS ID ,'국수,새롬' AS NM FROM DUAL UNION ALL SELECT '3' AS ID ,'영호' AS NM FROM DUAL UNION ALL SELECT '5' AS ID ,'아름,딸기,키위' AS NM FROM DUAL) SELECT ID -- ,영희,철수,민수, 첫번째 , 의 위치를 찾고 거기에 1을 더해서 영의 위치값(.. 더보기
oracle xmltype 오라클의 XMLTYPE을 사용한 칼럼이 있는 테이블을 조회할 경우 그냥 조회를 하면 데이타 확인이 안된다. 이럴때는 아래와 같은 방법을 사용하자.. XMLTYPE이 있는 테이블명 : TB_XML XMLTYPE의 칼럼명 : col_xml SELECT XMLSERIALIZE(CONTENT col_xml as VARCHAR2(2000)) FROM TB_XML; 추가로 한가지 항목만을 가져오고 싶을 경우 예를 들어 col_xml 칼럼에 아래와 같은 xml문서가 들어있고, PNAME을 조회하고 싶을때 FOTOG 011-111-1111 SELECT extractValue(col_xml, '/PERSON/PNAME') FROM TB_XML; ! 단 extractValue를 뽑아낼때 컬럼이 xml type이 아닐 경우.. 더보기
oracle XMLELEMENT,XMLAGG,XMLFOREST,XMLATTRIBUTES 함수 1. xlmelement함수 -> 조회된 결과에 테그를 붙여 결과를 xml형태의 자료로 만든다. 예) select a.deptcd, XMLELEMENT(dept, a.deptcd) xdept from m_dept a 결과) dept xdept 012345 012345 123231 123231 , , 2. xmlagg함수 -> XMLELEMENT에 의해 XML태그를 한줄로 만들어주는 문장 예) select XMLAGG(XMLELEMENT(dept, a.deptcd)) xdept from m_dept a 결과) xdept 012345123231,,,,,, 응용) -> XMLELEMENT함수로 조회된 행을 XML태그로 만들고 XMLAGG로 한줄로 만들어서 REPALCE같은 함수로 태그를 적절히 없애주면 끝.... 더보기
oracle exists vs in 일반적으로 IN operation은 특정 table(view) data의 row 값에 따른 다른 table의 데이터를 추출해내고자 할 때 자주 사용되는데, 가끔 IN operation을 row가 있는지 check하는 용도로 사용하기도 한다. 그러나 row가 존재하는지에 대해서는 EXISTS라는 근사한 operation을 따로 제공하고 있다. 주의해야 할 점은 EXISTS와 IN은 다른 점이 존재하므로 이에 대해 유의해야 한다. EXISTS는 단지 해당 row가 존재하는지만 check하고 더이상 수행되지 않으나 IN은 실제 존재하는 데이터들의 모든 값까지 확인한다. 따라서 일반적으로 EXISTS operation이 더 좋은 성능을 보이므로 가능하면 EXISTS를 사용하는 것이 바람직해 보인다. 또한가지 E.. 더보기