SQL
-
[ORACLE] 매개변수가 있는 프로시저DATABASE 2018. 12. 3. 16:07
■ 매개변수가 있는 프로시저 CREATE OR REPLACE PROCEDURE 프로시저명 ( 매개변수컬럼명 IN 타입형 )IS선언 BEGIN 작업 ( + 예외처리 ) END; □ 예시 ▶▶LOOP문 ( 각 컬럼 선언 ) create or replace procedure p_appart( m_apgrade IN IV_APPART.apgrade%TYPE %TYPE : 해당 테이블의 컬럼 타입과 동일하게)isv_apno IV_APPART.APNO%TYPE; v_apdiv IV_APPART.APDIV%TYPE;v_apdept IV_APPART.APDEPT%TYPE;v_appfield IV_APPART.APPFIELD%TYPE;v_apgrade IV_APPART.APGRADE%TYPE; CURSOR 선언 CURS..
-
[ORACLE] TIMESTAMP 활용 (데이터복구)DATABASE 2018. 11. 29. 11:32
10초 전의 상태를 조회SELECT *FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' SECOND)WHERE[컬럼명] = [ ] -- 키값 10분 전의 상태를 조회SELECT *FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE)WHERE[컬럼명] = [ ] 1시간 전의 상태를 조회SELECT *FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' HOUR)WHERE[컬럼명] = [ ] 1일 전의 상태를 조회SELECT *FROM[테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY)WHERE[컬럼명]..
-
[ORACLE] LISTAGG함수DATABASE 2018. 11. 6. 15:26
LISTAGG( 컬럼A, 구분자 ) WITHIN GROUP ( ORDER BY 컬럼B): 컬럼A의 값들을 [구분자]와 같이 컬럼B의 기준으로 정렬하여 한 행으로 보여주는 함수로 예시select * from APPARTwhere apgrade='907' 1. 각 원별로 학과 보여주기 select apdiv, listagg( apdept, ' ; ' ) within group (order by apno )from APPARTwhere apgrade='907'group by apdiv select apdiv, listagg( apdept, ' ; ' ) within group (order by apno desc ) --- apno의 내림차순으로from APPARTwhere apgrade='907'group b..
-
[ORACLE] MERGE문DATABASE 2018. 11. 6. 09:55
MERGE INTO 구문- 조건에 따라서 데이터의 삽입, 갱신, 삭제 작업을 한번에 할 수 있다.- 해당 행이 존재하는 경우 UPDATE / 새로운 행일경우 INSERT 수행한다.- 대상 테이블에 대한 UPDATE/INSERT 조건은 ON절에 의해 결정된다.- MERGE문에서 CLOB 사용시 업데이트할 내용이 2000bytes가 넘을때 ORA-00600오류가 발생하며, patch set 11.2.0.2 버전으로 해결가능 문법 MERGE INTO 테이블 A --- UPDATE / INSERT할 테이블USEING 대상테이블/뷰 B --- 비교대상 테이블 ( 동일 테이블이면 using dual 사용)ON (조건) --- A 와 B의 조인식WHEN MATCHED THEN --- ON 조건절에 맞는 ROW(행)이..
-
[ORACLE] ROW_NUMBER() OVER( )DATABASE 2018. 11. 5. 16:22
ROW_NUMBER() OVER( PATITION BY 중복조회컬럼 ORDER BY 정렬컬럼명): 특정 컬럼 기준으로 순위정하기(행번호 부여하기) ex) 교수별로 가장 오래된 날짜에 해당되는 데이터 출력 1. 교수별로 가장 오래된 날짜순으로 정렬하기 SELECTrow_number( ) over ( partition by empno order by from_dt ) rowno ,A.*FROM PER130TL A 2. 교수별로 가장 오래된 날짜(1건)에 해당하는 데이터 출력 SELECT *FROM ( SELECTrow_number( ) over ( partition by empno order by from_dt ) rowno,A.* FROM PER130TL A )WHERE rowno = 1 ex) 사번(RS..
-
[ORACLE] CONNECT BY LEVEL 활용 <달력>DATABASE 2018. 11. 5. 13:16
현재 달의 달력 표현 SELECT max(decode(to_char(sday+cnt-1,'d'),1,A.cnt)) 일,max(decode(to_char(sday+cnt-1,'d'),2,A.cnt)) 월,max(decode(to_char(sday+cnt-1,'d'),3,A.cnt)) 화,max(decode(to_char(sday+cnt-1,'d'),4,A.cnt)) 수,max(decode(to_char(sday+cnt-1,'d'),5,A.cnt)) 목,max(decode(to_char(sday+cnt-1,'d'),6,A.cnt)) 금,max(decode(to_char(sday+cnt-1,'d'),7,A.cnt)) 토FROM (select level cnt, trunc(to_date(SYSDATE),'mm'..
-
[ORACLE] CONNECT BY LEVEL 개념DATABASE 2018. 11. 5. 11:31
CONNECT BY LEVEL: 계층형 쿼리에서 자주 볼수 있는 CONNECT BY 절에서 , LEVEL을 사용하면, 원하는 만큼의 행을 리턴 - 1부터 10까지 10행을 표현하기 select level col from dualconnect by level < 11 ; ▶ 구구단 예제 select A||'*'||B||'='||A*Bfrom (select level+1 A from dual connect by level 구구단의 시작은 2단부터이므로 +1(select level B from dual connect by level A X B (B는 1~9까지이므로)
-
[ORACLE] DECODE 와 CASEDATABASE 2018. 11. 5. 10:43
DECODE ( 값, IF1, THEN1, IF2, THEN2 ...): 값이 IF1일 경우 THEN1 값을 반환하고, 값이 IF2일 경우 THNE2 값을 반환한다. DECODE함수 안에 DECODE 함수 중첩으로 사용가능 select GRADE, DECODE(GRADE, 908, '2017년', 907, '2016년', 906, '2015년', 907, '2014년') YEARfrom IV_APMANwhere GRADE >= 905group by GRADE; CASE- CASE 변수 when 조건값 then 결과값 ... END select GRADE, CASE GRADE when 908 then '2017년' when 907 then '2016년' when 906 then '2015년' when 90..