본문 바로가기

개발37


오라클 - 계층형 쿼리 START WITH... CONNECT BY PRIOR 오라클에서는 아주 강력한 계층형 쿼리를 지원한다. 제목에도 써놨지만 바로 START WITH... 어쩌고 저쩌고 CONNECT BY PRIOR 이다. 왜 오라클에서는 이라고 써놨냐면 다른 DBMS 에서는 지원하지 않는 듯 하기 때문이다. (잘못 알고 있는 걸수도 있는데 -_- 그렇다고 한다.) 하여튼 이 계층형 쿼리는 아주 편리한 쿼리인데 특히나 게시판 + 답글 같은 쿼리를 작성할 때 아주 유용하게 사용할 수 있다. 기본적인 사용법은 다음 쿼리를 보자. SELECTLEVEL, LPAD(EMPLOYEE_ID, LEVEL*3, '.') FROMEMPLOYEES START WITH EMPLOYEE_ID = 100 CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID; START WITH .. 2018. 4. 14.
오라클 - 문자열을 자릿수만큼 채워주는 LPAD(), RPAD() 함수 DB 작업을 하다보면 가끔이지만 자릿수를 채워야 할 일이 생긴다. 예를 들자면 회원가입 시, 혹은 물품의 일련번호 기입시 순번이라거나 년도 + 시퀀스로 회원 번호를 만들거나 하는 경우인데 가끔 정말 무식한 방법으로 프로그램을 짠 곳을 보면 길이 체크를 해서 IF문으로 일일이 0, 00 등을 붙이는 곳이 있는데... 이건 정말 아니라고 본다. 하여튼 이럴 때는 오라클에서 제공하는 LPAD, RPAD 함수를 사용하면 되는데 이 함수들은 지정한 자릿수만큼 부족한 글자를 채워주는 기능을 한다. 사용법은 매우 간단하다.LPAD('컬럼 또는 문자열', 길이, '문자') RPAD('컬럼 또는 문자열', 길이, '문자') SELECT LPAD('1', 5, '0'), LPAD('11', 5, '0') FROM DUAL.. 2018. 4. 14.
오라클 - 정규표현식 함수 REGEXP_REPLACE() 오라클 정규표현식 함수 복습 제 2탄은 REGEXP_REPLACE() 되겠다.정규식은 참 공부하면 공부할수록 쓸 일도 많고 아주 좋고 훌륭한 녀석인 것 같다. REPLACE 가 단순하게 글자와 글자를 비교해 치환을 해준다면 REGEXP_REPLACE 또한 REGEXP_SUBSTR 과 마찬가지로 정규식을 이용해 좀 더 다양하고 자세한 패턴으로 문자열을 검색, 변경할 수 있다. 우선은 간단한 것부터 예를 들어서 해보자. 기본 문법은 아래와 같다.REGEXP_REPLACE(COLUMN, [REG_EXP], [REPLACE_STR], [START_INDEX], [REPLACE_INDEX]) /* 기본적인 사용 방법 */ SELECT REGEXP_REPLACE('안녕하세요., 반갑습니다./', '\..', '.'.. 2018. 4. 1.
오라클 - 정규표현식 함수 REGEXP_SUBSTR() 이번에는 오라클 정규표현식의 여러 함수 중 REGEXP_SUBSTR() 에 대한 복습이다. SUBSTR 이 단순하게 인덱스를 지정해 문자열을 잘라냈다고 한다면 REGEXP_SUBSTR 은 정규식을 이용해좀 더 다양한 방법, 다양한 패턴으로 문자열을 자르는 것이 가능하다. 예를 들자면 이메일 주소에서 아이디, 도메인을 잘라서 따로 표기해야 한다고 했을 때 SUBSTR 은 뭐 @ 의 인덱스를 찾고 어쩌고 뭐하고 했을 것을 간단하게 아래와 같은 문장으로 처리할 수 있다. SELECTMEM_EMAIL , REGEXP_SUBSTR(MEM_EMAIL, '[^@]+', 1, 1) AS EMAIL_ID , REGEXP_SUBSTR(MEM_EMAIL, '[^@]+', 1, 2) AS EMAIL_DOMAIN FROMREG.. 2018. 4. 1.
오라클 - function (펑션) 만들기 기초문법. PL/SQL 에 매우 약한 나를 위해 남기는 펑션 만들기 기초문법! 기본적으로 펑션은 아래의 형태를 갖는다. CREATE [OR REPLACE] FUNCTION FUNCTION_NAME [(argument1 [mode1] DATA_TYPE, argument2 [mode2] DATA_TYPE, ~~~반복~~~)] RETURN 타입 --세미콜론을 넣지 않는다. 넣으면 컴파일 에러!! IS 변수 변수타입; BEGIN PL/SQL 작성; END; OR REPLACE 붙여도 상관없고 안 붙여도 상관은 없지만 붙이는 경우 이미 존재하는 펑션명이라면 기존 펑션의 내용을 지우고 재생성(이라기보다 수정?) 한다. 물론 붙이지 않는다면 해당 펑션명이 이미 존재한다는 에러를 뿜어내고 종료. FUNCTION_NAME 당연하게.. 2018. 3. 17.
오라클 - SQLGate2010 으로 function (펑션) 생성 시 주의, ORA-06575 : 패키지 또는 함수 ~ 은 부적당한 상태입니다. 오늘도 열심히 공부를 위해 뭔가를 해볼까 하다가 오늘은 펑션을 해봐야겠다는 생각이 들었다. 나는 PL/SQL 이 너무나도 약한 그런 남자니까... 그래서 지난주 했던 order by decode 에서 사용했던 select 문에 적용할 날짜 펑션을 만들어보기로 했다. CREATE OR REPLACE FUNCTION FN_GET_DATE_FORMAT (I_STR VARCHAR2) RETURN VARCHAR2 IS V_DATE VARCHAR2(10); BEGIN IF(LENGTH(I_STR) = 8) THEN SELECT TO_CHAR(TO_DATE(I_STR, 'YYYYMMDD'), 'YYYY.MM.DD') INTO V_DATE FROM DUAL; END IF; IF(LENGTH(I_STR) = 14) TH.. 2018. 3. 17.