본문 바로가기

개발/오라클

(15)
오라클 - 펑션(FUNCTION) 생성 복습! 오늘은 오라클 펑션 생성 복습 시간이다. 사실 저번 기초 문법과 크게 바뀐 것은 없지만 나름대로 약간의 변화를 줘봤다. CREATE OR REPLACE FUNCTION FN_GET_DATE_2018_04_29(I_DIV VARCHAR2) RETURN VARCHAR2 IS V_DATE VARCHAR2(100); USER_DEFINE_EXCEPTIONEXCEPTION; BEGIN IF I_DIV = 'SYSDATE' THEN SELECT SYSDATE INTO V_DATE FROM DUAL; ELSIF I_DIV = 'YYYYMMDD' THEN SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') INTO V_DATE FROM DUAL; ELSIF I_DIV = 'YYYY-MM-DD' THEN S..
오라클 - CONNECT BY LEVEL 이전 시간에 CONNECT BY PRIOR 에 대해서 공부를 했는데 내친 김에 이어서 CONNECT BY LEVEL 에 대해서도 공부를 해보자. CONNECT BY LEVEL 은 결론부터 말하자면 FOR 문을 사용한 것처럼 결과 값을 보여주는 게 가능하다. 이것도 무슨 말인가 하면 설명하면 힘드니 곧바로 쿼리를 돌려서 알아보자. SELECTLEVEL FROMDUAL CONNECT BY LEVEL
오라클 - 계층형 쿼리 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 ..
오라클 - 문자열을 자릿수만큼 채워주는 LPAD(), RPAD() 함수 DB 작업을 하다보면 가끔이지만 자릿수를 채워야 할 일이 생긴다. 예를 들자면 회원가입 시, 혹은 물품의 일련번호 기입시 순번이라거나 년도 + 시퀀스로 회원 번호를 만들거나 하는 경우인데 가끔 정말 무식한 방법으로 프로그램을 짠 곳을 보면 길이 체크를 해서 IF문으로 일일이 0, 00 등을 붙이는 곳이 있는데... 이건 정말 아니라고 본다. 하여튼 이럴 때는 오라클에서 제공하는 LPAD, RPAD 함수를 사용하면 되는데 이 함수들은 지정한 자릿수만큼 부족한 글자를 채워주는 기능을 한다. 사용법은 매우 간단하다.LPAD('컬럼 또는 문자열', 길이, '문자') RPAD('컬럼 또는 문자열', 길이, '문자') SELECT LPAD('1', 5, '0'), LPAD('11', 5, '0') FROM DUAL..
오라클 - 정규표현식 함수 REGEXP_REPLACE() 오라클 정규표현식 함수 복습 제 2탄은 REGEXP_REPLACE() 되겠다.정규식은 참 공부하면 공부할수록 쓸 일도 많고 아주 좋고 훌륭한 녀석인 것 같다. REPLACE 가 단순하게 글자와 글자를 비교해 치환을 해준다면 REGEXP_REPLACE 또한 REGEXP_SUBSTR 과 마찬가지로 정규식을 이용해 좀 더 다양하고 자세한 패턴으로 문자열을 검색, 변경할 수 있다. 우선은 간단한 것부터 예를 들어서 해보자. 기본 문법은 아래와 같다.REGEXP_REPLACE(COLUMN, [REG_EXP], [REPLACE_STR], [START_INDEX], [REPLACE_INDEX]) /* 기본적인 사용 방법 */ SELECT REGEXP_REPLACE('안녕하세요., 반갑습니다./', '\..', '.'..
오라클 - 정규표현식 함수 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..
오라클 - 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 당연하게..
오라클 - 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..