Database/Oracle
-
ROLLUP ROLLUP함수는 GROUP BY절과 함께 사용됩니다. ROLLUP을 이용하면 GROUP BY절로 집계된 결과에 더 자세한 정보를 확인할 수 있습니다. 테이블을 하나 만들어 테스트해보겠습니다. TESTDB라는 테이블을 생성했습니다. 각각의 컬럼은 다음과 같습니다. SNO : 학번 SNAME : 학생명 HAKBU : 학부 DEP : 전공학과 PAY : 등록금 이제 이 테이블을 이용해서 ROLLUP이 어떤 기능을 하는지 확인해보겠습니다. SELECT HAKBU, DEP, SUM(PAY) PAY, COUNT(SNO) S_COUNT FROM TESTDB GROUP BY HAKBU, DEP ORDER BY HAKBU 먼저 학부의 학과별 등록금의 총액과 학생 수를 조회해보겠습니다. 위와 같이 학부의 학..
[Oracle]ROLLUP 2018. 8. 22. -
예전에 꽤 헤맸던 오류였는데 따로 메모해둔 자료가 있어서 기록을 해두려고 합니다.ORA-01417: 하나의 테이블은 하나의 다른 테이블과 포괄 조인할 수 있습니다이 에러는 대상 테이블을 두 개 이상의 테이블과 동시에 아우터 조인할 때 발생합니다. 아래 에러를 내기위해서 임의로 쿼리문을 만들었습니다.SELECT A.O_NM , B.O_NM , C.O_NMFROM ( SELECT 'C001' O_CD , 'A' O_NM FROM DUAL ) A ,( SELECT 'C002' O_CD , 'B' O_NM FROM DUAL ) B ,( SELECT 'C003' O_CD , 'C'..
[Error]ORA-01417: 하나의 테이블은 하나의 다른 테이블과 포괄 조인할 수 있습니다 2018. 8. 20. -
TRUNC TRUNC함수는 절삭 함수입니다. 소수점 자리를 지정하여 자르거나 날짜형식을 지정하여 자를 수 있습니다. 정확히는 해당 날짜형식 이외에는 초기화를 시켜버린다고 볼 수 있습니다. 소수점의 경우 ☞ TRUNC(숫자, 소수점 자리) SELECT TRUNC(2018.0817, 2) FROM DUAL (참고) -1 : 일의 자리부터 절삭 -2 : 십의 자리부터 절삭 -3 : 백의 자리부터 절삭 SELECT TRUNC(2018.0817, -1) FROM DUAL 날짜의 경우 ☞ TRUNC(날짜, 날짜형식) ※ 반드시 날짜타입으로 들어가야 합니다.(TO_DATE, 혹은 SYSDATE) 날짜형식 YYYY(년) SELECT TRUNC(TO_DATE('201808171130','YYYYMMDDHH24MI'), ..
[Oracle]TRUNC 2018. 8. 17. -
꽤 긴 휴가가 끝나고 다시 일상으로 돌아왔습니다... ㅠㅠ 오늘은 데이터 딕셔너리 뷰 중 하나인 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.