Database
-
꽤 긴 휴가가 끝나고 다시 일상으로 돌아왔습니다... ㅠㅠ 오늘은 데이터 딕셔너리 뷰 중 하나인 USER_SOURCE에 대해 간단히 포스팅해보려 합니다. USER_SOURCE 앞서 ALL_OBJECTS를 사용해 테이블, 트리거, 프로시저 등을 찾을 수 있었습니다. USER_SOURCE는 트리거, 프로시저, 패키지, 함수에 관한 정보를 담고 있습니다. USER_SOURCE의 컬럼은 아래와 같은데 주로 TEXT 컬럼을 사용해서 오브젝트를 찾습니다. 만약 TESTTB라는 테이블을 수정해주는 오브젝트를 찾는다면 아래와 같은 형식으로 쿼리를 입력하면 됩니다. SELECT * FROM USER_SOURCE WHERE 1=1 AND TEXT LIKE '% UPDATE TESTTB %' + 피드백은 언제나 환영입니다 :)
[Oracle]USER_SOURCE 사용 2018. 8. 1. -
만약 DB에 테이블이 너무 많아서 원하는 테이블을 찾기 힘들다면 ALL_OBJECTS를 이용해 해당 테이블을 찾을 수 있습니다. (프로시저, 트리거, 함수 등 마찬가지로) ALL_OBJECTS ALL_OBJECTS는 데이터 딕셔너리 뷰입니다. 데이터 딕셔너리 뷰에는 DBA_, ALL_, USER_가 존재하는데 우선 오늘은 ALL_에 대해서만 알아보겠습니다. 아래와 같이 ALL_OBJECTS를 이용하면 DB에 존재하는 모든 오브젝트를 확인할 수 있습니다. SELECT * FROM ALL_OBJECTS 조금 더 자세히 볼 때 예를 들어, OBJECT_TYPE에 TABLE, OBJECT_NAME에 TABLE명을 입력한다면 원하는 테이블을 찾을 수 있습니다. SELECT * FROM ALL_OBJECTS WHE..
[Oracle]ALL_OBJECTS 사용 2018. 7. 20. -
TO_CHAR TO_CHAR는 날짜를 문자열로 바꾸는데 사용합니다. SELECT SYSDATE , TO_CHAR(SYSDATE , 'YYYYMMDD') , TO_CHAR(SYSDATE , 'YYYY-MM-DD') , TO_CHAR(SYSDATE , 'YYYYMMDDHH24MISS') FROM DUAL 이런 형태로 많이 사용했었는데 오늘 새로운 타입을 알게 되어 기록을 남깁니다. SELECT TO_CHAR(SYSDATE , 'YYYYMMDD') , TO_CHAR(SYSDATE , 'D') FROM DUAL 주목할 부분은 'D' 부분입니다. 처음에는 DD를 잘못 봤나했습니다. 저 타입이 의미하는 것은 아래와 같이 해당 날짜의 요일을 숫자로 바꾸는 것입니다. 숫자 3은 화요일을 의미합니다. 일요일부터 토요일까..
[Oracle]TO_CHAR 2018. 7. 17. -
PL/SQL(Procedual Language) PL/SQL은 오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 프로그래밍 언어 중 하나이다.(위키 참고) SQL은 비절차언어인 반면, PL/SQL은 영문 뜻대로 절차지향 프로그래밍 언어이다. SQL로 다양한 처리를 할 수 있지만 그 한계(?)를 PL/SQL로 해결할 수 있다. 변수를 선언하거나 for문, 값을 리턴하는 등 프로그래밍적 요소를 추가해서 말이다. 오늘은 FOR문에 대해 정리를 해놓으려 하는데 그 중에서도 테이블의 ROW 수를 이용한 FOR문과 일반적인 상수를 이용한 FOR문이다. 먼저 테이블의 ROW 수만큼 FOR문을 돌리는 방법이다. [변수] [데이터 타입] -- 변수(입출력 변수가 아닐 경우 DECLARE 영역 밖에 선언되어도 무방..
[Oracle]PL/SQL FOR문 2018. 7. 15. -
트리거(Trigger) 트리거는 어떤 테이블에 이벤트(INSERT, UPDATE, DELETE)가 발생했을 때 자동적으로 실행되는 작업입니다. 제가 경험한 트리거는 테이블의 히스토리를 남기기 위한 목적으로 사용됐었습니다. 오라클에서 트리거의 문법은 다음과 같습니다. CREATE [OR REPLACE] TRIGGER [트리거명] [AFTER OR BEFORE] INSERT OR UPDATE OR DELETE ON [테이블명] [REFERENCING NEW AS NEW OLD AS OLD] [FOR EACH ROW] [DECLARE] BEGIN END [트리거명]; AFTER : 이벤트가 발생한 후 트리거 실행 | BEFORE : 이벤트가 발생하기 전에 트리거 실행 INSERT, UPDATE, DELETE ..
[Oracle]트리거(Trigger)의 사용 2018. 7. 13. -
데이터를 실수로 수정 또는 삭제를 한경우(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.