본문 바로가기

개발34

오라클 - 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.
오라클 - 임의의 순서로 정렬하기 order by decode, order by case 이거 완전 신기방기하다. 이런 게 있다는 걸 왜 지금까지 몰랐을까?알았다면 굳이 어렵게 쿼리를 두 번을 돌려가며 union 을 안 써도 됐을텐데... 어쨌든 order by decode 를 사용하게 된 상황은 다음과 같다.아래와 같은 데이터가 있다고 하자. 결제일 상품 결제상태 2018.03.16 검은사막 모바일 배송 중 2018.03.14 슈퍼판타지워 배송 완료 2018.03.10 개그콘서트 환불 2018.02.15 비트코인 떡상 가즈아 환불 2018.02.13 티스토리 편집기 불편 배송 완료 2018.02.11 여의도 벚꽃 놀이 배송 완료 2018.02.10 우리나라 좋은 나라 환불 2018.02.07 게임을 하면 이겨야지 배송 중 위 데이터는 결제일을 기준으로 order by 결제일 desc 를 한.. 2018. 3. 17.
오라클 - 숫자 컬럼 기준 정렬이 이상하게 되는 경우 가끔 SELECT 쿼리를 날리다 보면 숫자로 된 컬럼을 기준으로 정렬 시 정렬이 제대로 되지 않는 현상이 있다. IDX 111122212223331 대충 위와 같은 느낌으로 되는 경우가 있는데 이럴 경우 ORDER BY 에서 해당 컬럼을 숫자로 인식하도록TO_NUMBER() 를 사용해서 정렬하면 된다. ORDER BY IDX ASCORDER BY TO_NUMBER(IDX) ASC 이거 말고 다르게 할 수 있는 방법은 없을까?아시는 분 알려줘요~ 2018. 3. 10.
정규식 표현 정규표현식 설명 예문 결과값 추가설명 ^x 문자열이 x로 시작함 REGEXP_LIKE(LAST_NAME, '^A') Atkinson 대소문자 구별 Ande Abel x$ 문자열이 x로 끝남 REGEXP_LIKE(LAST_NAME, 'n$') Bernstein 대소문자 구별 Olsen McEwen . 임의의 한 문자 REGEXP_LIKE(LAST_NAME, 'n.z') Lorentz 대소문자 구별 x+ x가 1개 이상 존재함 REGEXP_LIKE(LAST_NAME, 'in+s') Atkinnson 예시는 k 뒤에 i 가 1개 이상 오는 것을 찾는다. 단독으로 사용하기는 의미 없을 것 같다. Marvins Perkins Higgins x* x가 0개 이상 존재함 REGEXP_LIKE(LAST_NAME, 'i.. 2018. 3. 10.
오라클 - 조인(JOIN)의 종류 뭔가 개소리가 엄청나게 긴 글이 있었는데 지우고 그냥 알아보기 쉬운 그림이 있어서 퍼옴;출처는 저기 써있네. http://commons.wikimedia.org/wiki/User:Arbeck 2018. 2. 20.
오라클 - DDL, DML, DCL 1. DDL(Data Definition Language)데이터와 그 구조를 정의합니다. 1) CREATE : 데이터베이스 객체를 생성합니다.2) DROP : 데이터베이스 객체를 삭제합니다.3) ALTER : 기존에 존재하는 데이터베이스 객체를 재정정의하는 역할을 합니다.4) RENAME : 데이터베이스의 컬럼명을 변경합니다.5) TRUNCATE : 테이블을 최초 생성된 초기상태로 만들며, ROLLBACK이 불가능합니다. 2. DML(Data Manipulation Language)데이터의 검색, 수정, 삭제 등을 처리합니다. 1) INSERT : 데이터베이스 객체에 데이터를 입력합니다.2) DELETE : 데이터베이스 객체의 데이터를 삭제합니다.3) UPDATE : 기존에 존재하는 데이터베이스 객체 안.. 2018. 2. 20.
오라클 RANK 심화 - RANK() WITHIN GROUP(), RANK() OVER(), ROW_NUMBER() OVER(), DENSE_RANK() ※ ORDER BY SALARY DESC 의 그룹에서 3,000 의 순위는? 기본 문법 : RANK(순위를 구할 컬럼 혹은 값) WITHIN GROUP(ORDER BY 기준이 될 컬럼 [정렬값]) 값 대신 컬럼명을 이용해 전체적인 순위를 구할 수도 있다. SELECT RANK(3000) WITHIN GROUP(ORDER BY SALARY DESC) as DESC_RANK FROM EMPLOYEES DESC_RANK : 82 SELECT RANK(3000) WITHIN GROUP(ORDER BY SALARY ASC) as ASC_RANK FROM EMPLOYEES ASC_RANK : 25 ※ 제일 많은 급여를 받는 사람부터 정렬하면서 RANK 매기기 기본 문법 : RANK() OVER(ORDER BY 기준.. 2018. 2. 18.
오라클 AVG 심화 - AVG() OVER() ※ 부서ID 를 기준으로 급여의 평균을 구해 같이 표시해준다. 기본 문법 : AVG(평균값을 구할 컬럼) OVER(PARTITION BY 기준이 될 컬럼) SELECT EMPLOYEE_ID, SALARY, DEPARTMENT_ID, AVG(SALARY) OVER(PARTITION BY DEPARTMENT_ID) AS DEPART_AVG_SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID IN (10,20,30); ※ 결과값 EMPLYEE_ID SALARY DEPARTMENT_ID DEPART_AVG_SALARY 200 4400 10 4400 201 13000 20 9500 202 6000 20 9500 114 11000 30 4150 115 3100 30 4150 116 2900 .. 2018. 2. 18.
많이 쓰이는 오라클 함수 ※ 반올림 함수 - round(value, n) . 을 기준으로 양수는 오른쪽, 음수는 왼쪽이다. 양수일 경우는 . 을 기준으로 오른쪽에서 n 만큼 이동한 후 해당 커서가 닿는 곳의 오른쪽의 수를 반올림한다.음수일 경우는 . 을 기준으로 오른쪽에서 n 만큼 이동한 후 해당 커서가 닿는 곳의 왼쪽의 수를 반올림한다. 예) round(13.281, 2) : 13.28예) round(13.286, 2) : 13.29예) round(13.281, -1) : 10 ※ 버림 함수 - trunc(value, n) . 을 기준으로 양수는 오른쪽, 음수는 왼쪽이다. 양수일 경우는 . 을 기준으로 오른쪽에서 n 만큼 이동한 후 해당 커서가 닿는 곳의 오른쪽의 수를 반올림한다.음수일 경우는 . 을 기준으로 오른쪽에서 n 만.. 2018. 2. 18.