본문 바로가기

Programming/Oracle22

오라클 누적합 구하기 SELECT SUM(VOL_EACH) OVER (ORDER BY ROWID) AS VOL , VOL_EACH , AREA , ELEV FROM ( SELECT CASE WHEN LAG(ELEV,1,0) OVER (ORDER BY ELEV ASC) = 0 THEN 0 ELSE ((AREA + (LAG(AREA,1,0) OVER (ORDER BY AREA ASC)) ) * (ELEV - (LAG(ELEV,1,0) OVER (ORDER BY ELEV ASC))) ) / 2.0 END AS VOL_EACH , AREA , ELEV , IVOL_SEQ , RSVR_CODE FROM ANL_RSVR_IVOL ) 결론은 SUM(VOL_EACH) OVER (ORDER BY ROWID) 2011. 11. 25.
일정 영역의 숫자를 row로 생성하는 오라클(Oracle) 쿼리 그동안 DICTIONARY 를 이용한 것은 정말 뻘짓이었네요..... 이것으론 1800 여개까지만 가능하다는 것을 알고 다른것을 찾다가, CONNECT BY LEVEL 을 찾았습니다!!!! 출처 : http://sewony.tistory.com/entry/%EC%9D%BC%EC%A0%95-%EC%98%81%EC%97%AD%EC%9D%98-%EC%88%AB%EC%9E%90%EB%A5%BC-row%EB%A1%9C-%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94-%EC%98%A4%EB%9D%BC%ED%81%B4Oracle-%EC%BF%BC%EB%A6%AC 간혹 일정 영역의 숫자 ( 예를 들면 1에서 10까지)를 row로 생성해야 하는 경우가 있다. 이런 경우 사용하는 쿼리 1. Pure SQ.. 2011. 11. 24.
두 시간 사이를 분단위로 구해보자. --차이값 얻기 SELECT TRUNC((TO_TIME - FROM_TIME)*24 * 60) AS DIFF FROM ( SELECT TO_DATE('201111261212', 'YYYYMMDDHH24MI') TO_TIME , TO_DATE('201111251212', 'YYYYMMDDHH24MI') FROM_TIME FROM dual ) --갯수만큼 구하기 SELECT ROWNUM NUM FROM DICTIONARY DIC , ( SELECT TRUNC((TO_TIME - FROM_TIME)*24 * 60) AS DIFF FROM ( SELECT TO_DATE('201111261212', 'YYYYMMDDHH24MI') TO_TIME , TO_DATE('201111251212', 'YYYYMMDDHH2.. 2011. 11. 24.
커서로 반복 작업을 할때에 -- 디버깅용 SET SERVEROUTPUT ON ; DECLARE CURSOR CUR1 IS SELECT * FROM ORGNL; BEGIN FOR CUR IN CUR1 LOOP -- 프로시저 호출 UP_AVERAGE(TRIM(CUR.CODE), SUBSTR(TRIM(CUR.DT),5,4)); END LOOP; END ; 2011. 11. 17.
[ORACLE] 컬럼 추가, 수정, 삭제 출처: http://munduki.tomeii.com/darkhorse/entry/ORACLE-%C4%C3%B7%B3-%C3%DF%B0%A1-%BC%F6%C1%A4-%BB%E8%C1%A6 ALTER TABLE 구테이블명 RENAME TO 신테이블명; ALTER TABLE [TABLE NAME] RENAME COLUMN [COLUMN NAME] TO [NEW COLUMN NAME]; --컬럼명 바꾸기 ALTER TABLE high_tax RENAME COLUMN year_comm TO tax ; --컬럼수정 alter table high_tax modify ( tax number(10,2) ) ; --컬럼 삭제 Alter table high_tax Drop ( tax ); --컬럼추가 Alter table.. 2011. 11. 17.
오라클 스케쥴 스케쥴 등록 DECLARE V_JOB NUMBER(5); BEGIN DBMS_JOB.SUBMIT(V_JOB, 'UP_NEAREST_YEAR;', SYSDATE, 'TRUNC(SYSDATE) + 23/24'); COMMIT; END; 스케쥴 확인 SELECT * FROM USER_JOBS 스케쥴 수정 -- 매일 오전 3시에 실행 BEGIN DBMS_JOB.INTERVAL(24, 'TRUNC(SYSDATE) + 1 + 3/24'); END; -- 다음 실행 시각 설정 BEGIN DBMS_JOB.NEXT_DATE(42, TO_DATE('20080417030000','YYYYMMDDHH24MISS')); END; -- 등록된 스케줄을 삭제하는 쿼리BEGIN DBMS_JOB.REMOVE(41); END; 2011. 11. 14.