Database
-
데이터를 수정하다보면 SELECT한 결과를 기반으로 UPDATE를 해야할 때가 종종 있다.오늘은 SELECT후에 조건을 따져서 UPDATE문을 만드는 방법을 올려본다. EMP_ID(사번)는 PK이며, TESTDB라는 테이블에 GENDER라는 속성이 추가 된 상황이라고 가정한다.EMP_ID의 앞자리는 성별을 구분하는 번호로서 1은 남자, 2는 여자를 의미한다.자 이제 쿼리를 보자. 1234567891011121314WITH TESTDB AS(SELECT '102233' EMP_ID, '이승현' EMP_NM, '개발팀' DEPART_NM, '' GENDER FROM DUAL UNION ALLSELECT '200011' EMP_ID, '김장미' EMP_NM, '운영팀' DEPART_NM, '' GENDER F..
[Oracle]SELECT 결과 UPDATE 2018. 6. 28. -
백분율을 구해야 할 때 2가지 방법을 이용할 수 있습니다. RATIO_TO_REPORT() OVER() 함수RATIO_TO_REPORT( COLUMN ) OVER( PARTITION BY 절) 함수를 이용할 수 있습니다.(*PARTITION BY 절은 없을 경우 빈 공간으로 생략가능) RATIO_TO_REPORT(MONTH_TM) * 100 이라고 하면 전체 MONTH_TM을 SUM한 값 중 MONTH_TM이 몇 %를 차지하는지 알 수 있습니다. 또 PARTITION BY로 그룹을 지어주면 그룹별 %도 알 수 있습니다. 간단하게 쿼리로 결과를 알아보겠습니다.WITH TESTDB AS(SELECT '이승현' EMP_NM, 15 MILEAGE FROM DUAL UNION ALLSELECT '이상천' EMP..
[Oracle]백분율 구하기 2018. 6. 28. -
함수 분석 중 발견한 CHR(13)과 CHR(10) CHR CHR함수는 함수 인자에 대응하는 문자를 나타낸다.CHR(13)은 캐리지 리턴이라고 하며, 현재 커서가 위치한 줄의 맨 앞으로 보낸다.CHR(10)은 라인 피드라고 하며, 현재 커서가 위치한 줄에서 한 칸 아래로 이동한다. 자바에서 말하자면 CHR(13)은 \r 이고 CHR(10)은 \n 로 볼 수 있다.아래는 인자값을 갖고 오는 아스키 코드 표이다. 참고하시길.. 이외에도 CHR(65)는 A, CHR(66)은 B로 표현이 된다. + 피드백은 언제나 환영입니다 :)
[Oracle]CHR(13)과 CHR(10) 2018. 6. 26. -
DB 함수 생성 작업 중 처음 보는 SQLCODE가 조회되었습니다.. 원인을 찾으려고 이것저것 해보다가 유용한 함수 하나를 발견했습니다. DBMS_OUTPUT.PUT_LINE(SQLERRM); SQLERRM은 오류 코드(SQLCODE)와 관련된 메세지를 반환해주는 함수입니다. FN_GET_WORKTM이라는 함수에는 예외 처리로 SQLCODE를 리턴해주고 있는데 검색 중 발견한 함수를 바로 사용해봤습니다. 그리고 다시 조회를 해봤습니다. 오류 메시지가 출력되고 아래 DBMS OUTPUT에서 그 이유를 찾을 수 있었습니다. ORA-06502: PL/SQL: 수치 또는 값 오류 문자열 버퍼가 너무 작습니다. 원인은 함수에서 조회 된 컬럼의 크기보다 리턴하는 변수의 크기가 작았기 때문이었습니다. 예를 들어, A..
[Oracle]ORA-06502 : PL/SQL: 수치 또는 값 오류 문자열 버퍼가 너무 작습니다. 2018. 6. 20. -
요근래 신규 프로그램 개발 건으로 정신없이 시간이 지나간 것 같다. 그래서 포스팅도 많이 못했고..오늘은 가장 최근에 쿼리를 압축해 함수를 만들면서 오류를 잡았던 과정을 기록하려고 한다.DB 함수는 많이 만들어본 경험이 없어서 조금 버벅거렸다. 쿼리문을 정리하고 컴파일. 예상했던대로 오류..아래 오류 내용을 살펴봤다. ORA-00947 : 값의 수가 충분하지 않습니다. 확인 결과, 해당 오류는 INSERT하고자 하는 컬럼 수와 입력하고자 하는 항목의 수가 다른 경우 발생한다.현재 함수에서는 SELECT된 결과를 정의된 변수들에게 입력을 해주고 있다. 그리고 해당 변수들을 리턴하는 식. 즉, SELECT된 컬럼이 모두 사용되지 않았기 때문에 문제가 발생한 것이었다. 이해를 쉽게하기 위해 아래 TEST용 함..
[Oracle]ORA-00947 : 값의 수가 충분하지 않습니다. 2018. 6. 20. -
UNION두 테이블을 결합하며, 중복되지 않는 값들을 반환한다. UNION ALL두 테이블을 결합하며, 중복되는 값들도 반환한다. 즉, UNION과 UNION ALL은 두 개 이상의 테이블에서 조합된 데이터를 출력하고자 할 때 사용한다. 아래 결과는 테스트를 위해 더미 테이블을 결합한 결과이다. SELECT A.*FROM ( SELECT 1 SEQ, 'LSH' PNAME, 'M' GENDER, '01012345678' TEL FROM DUAL UNION ALL SELECT 2 SEQ, 'WBN' PNAME, 'F' GENDER, '12312345678' TEL FROM DUAL ) AUNIONSELECT B.*FROM ( SELECT 1 SEQ, 'LSH' PNAME, 'M' GENDER, '010123..
[Oracle]UNION과 UNION ALL 2018. 6. 3. -
스칼라 서브 쿼리(Scalar Subquery) 사용자가 원하는 조건의 데이터를 조회시킬 때 흔히 서브 쿼리를 사용한다.스칼라 서브 쿼리는 SELECT절에서 사용하는 서브 쿼리를 뜻한다.아래 쿼리문과 같이 스칼라 서브 쿼리는 단건의 데이터가 나와야 한다. SELECT 'QUERY TEST' A1 , ( SELECT 'SCALAR SUBQUERY' A2 FROM DUAL ) A2 FROM DUAL; 만약 데이터가 한 건이 넘는다면 에러가 난다. SELECT 'QUERY TEST' A1 , ( SELECT 'SCALAR SUBQUERY' A2 , 'ERROR COLUMN' A3 FROM DUAL ) A2 FROM DUAL; 인라인 뷰(Inline View) 인라인 뷰는 FROM절에서 사용되는 쿼리를 말한다...
[Oracle]스칼라 서브쿼리와 인라인 뷰 2018. 5. 31. -
ADD_MONTHS ADD_MONTHS 함수는 오라클에서 사용가능한 함수이며, 자신이 원하는 날짜에 특정 개월 수를 더한 값을 추출할 수 있다.용법은 다음과 같다.☞ ADD_MONTHS( 날짜, +개월 수 )쿼리 결과를 보면 이해하기 쉽다. SELECT A.DT , TO_CHAR(ADD_MONTHS(A.DT, 2),'YYYY-MM-DD') ADD_DTFROM (SELECT TO_CHAR(TO_DATE('20180530','YYYYMMDD'), 'YYYY-MM-DD') AS DT FROM DUAL) A ☞ 참고① : 2월의 경우 28일까지밖에 존재하지 않기 때문에 마지막 날로 조회가 된다. SELECT A.DT , TO_CHAR(ADD_MONTHS(A.DT, 2),'YYYY-MM-DD') ADD_DTFRO..
[Oracle]ADD_MONTHS 2018. 5. 30.