Database/Oracle
-
데이터를 실수로 수정 또는 삭제를 한경우(COMMIT까지 한 상황)에 데이터를 복구할 수 있는 방법이 하나 있다.무엇보다 가장 좋은 건 백업이겠지만.. 오라클에서는 TIMESTAMP라는 함수를 제공해 과거 데이터를 조회할 수 있도록 한다.본 기능은 oracle 9i 이상에서 제공한다고 한다. 1SELECT * FROM TABLE1 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE);cs 1SELECT * FROM TABLE1 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' HOUR);cs 1SELECT * FROM TABLE1 ..
[Oracle]데이터 복구(TIMESTAMP) 2018. 7. 12. -
오라클에서 N시간 전, 후를 구하는 방법. SELECT TO_DATE('201807091530','YYYYMMDDHH24MI')FROM DUAL; [N(3)시간 전] SELECT TO_DATE('201807091530','YYYYMMDDHH24MI')-3/24FROM DUAL; [N(2)시간 후] SELECT TO_DATE('201807091530','YYYYMMDDHH24MI')+2/24FROM DUAL; [30분 후] SELECT TO_DATE('201807091530','YYYYMMDDHH24MI')+1/24*0.5FROM DUAL; [1분 전] SELECT TO_DATE('201807091530','YYYYMMDDHH24MI')-1/24/60FROM DUAL;
[Oracle]시간 계산 2018. 7. 9. -
오라클에서는 순위를 반환해주는 함수로 RANK() OVER()와 ROW_NUMBER() OVER() 함수를 제공한다.이 두 함수는 서로 차이가 있다. RANK() OVER() / ROW_NUMBER() OVER() 사용 문법은 OVER안에 ORDER BY로 비교할 컬럼을 입력해주면 된다.☞ RANK() OVER( ORDER BY COLUMN ) 이제 쿼리를 통해 확인해보자.월드컵의 데이터가 담긴 테이블이 있고, 해당 승점(SCORE)에 따라 순위를 부여하고자 한다. 12345678910111213141516WITH TESTDB AS( SELECT '스웨덴' NATION_NM, 3 PLAY, 2 WIN, 0 DRAW, 1 LOSE, '5/2' GAL, 3 GAP, 6 SCORE FROM DUAL UNION..
[Oracle]RANK() OVER()와 ROW_NUMBER() OVER 2018. 7. 4. -
데이터를 수정하다보면 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.