[ORACLE]WMSYS.WM_CONCAT 월별데이터 합치기

Database 2018.04.06 09:17 Posted by 애플자라

SELECT 
    GROUP_NAME,
    WMSYS.WM_CONCAT(MARKETING_DATE_01) AS DATE_01,
    WMSYS.WM_CONCAT(MARKETING_DATE_02) AS DATE_02,
    WMSYS.WM_CONCAT(MARKETING_DATE_03) AS DATE_03,
    WMSYS.WM_CONCAT(MARKETING_DATE_04) AS DATE_04,
    WMSYS.WM_CONCAT(MARKETING_DATE_05) AS DATE_05,
    WMSYS.WM_CONCAT(MARKETING_DATE_06) AS DATE_06,
    WMSYS.WM_CONCAT(MARKETING_DATE_07) AS DATE_07,
    WMSYS.WM_CONCAT(MARKETING_DATE_08) AS DATE_08,
    WMSYS.WM_CONCAT(MARKETING_DATE_09) AS DATE_09,
    WMSYS.WM_CONCAT(MARKETING_DATE_10) AS DATE_10,
    WMSYS.WM_CONCAT(MARKETING_DATE_11) AS DATE_11,
    WMSYS.WM_CONCAT(MARKETING_DATE_12) AS DATE_12
FROM (SELECT GROUP_NAME,
       MARKETING_DATE,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '01' THEN MARKETING_DATE END MARKETING_DATE_01,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '02' THEN MARKETING_DATE END MARKETING_DATE_02,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '03' THEN MARKETING_DATE END MARKETING_DATE_03,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '04' THEN MARKETING_DATE END MARKETING_DATE_04,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '05' THEN MARKETING_DATE END MARKETING_DATE_05,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '06' THEN MARKETING_DATE END MARKETING_DATE_06,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '07' THEN MARKETING_DATE END MARKETING_DATE_07,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '08' THEN MARKETING_DATE END MARKETING_DATE_08,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '09' THEN MARKETING_DATE END MARKETING_DATE_09,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '10' THEN MARKETING_DATE END MARKETING_DATE_10,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '11' THEN MARKETING_DATE END MARKETING_DATE_11,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '12' THEN MARKETING_DATE END MARKETING_DATE_12,
       ROW_NUMBER () OVER (PARTITION BY GROUP_NAME ORDER BY MARKETING_DATE) RNUM
  FROM TB_MARKETING
 WHERE     SUBSTR (MARKETING_DATE, 0, 4) = '2018'
       --AND GROUP_NAME = '건설기술용역공제조합' 
     )
START WITH RNUM = 1
CONNECT BY PRIOR RNUM = RNUM - 1 AND PRIOR GROUP_NAME = GROUP_NAME
GROUP BY GROUP_NAME
ORDER BY GROUP_NAME ASC

 

출처 - http://blog.naver.com/PostView.nhn?blogId=jaejin1028&logNo=220793468335 

 

[ORACLE]그룹함수로 중복된 컬럼 제거하기

Database 2017.11.08 15:16 Posted by 애플자라

-- 2건이상 데이터
SELECT  MAX(ID) AS ID, MAX(TIMS_DATE) AS TIMS_DATE, MAX(FUND_CODE) AS FUND_CODE, COUNT(*) AS CNT
  FROM IFT_FUND_STANDARD_MODIFY
  WHERE FUND_CODE ='01032'
GROUP BY TIMS_DATE||FUND_CODE
HAVING COUNT(*) > 1

 

-- 2건이상 데이터중 과거 데이터 삭제
DELETE  -- SELECT꼭 해보고 날려버린다
FROM IFT_FUND_STANDARD_MODIFY
WHERE TIMS_DATE||FUND_CODE
IN
(
    SELECT TIMS_DATE||FUND_CODE
    FROM IFT_FUND_STANDARD_MODIFY
    WHERE FUND_CODE ='01032'
    GROUP BY TIMS_DATE||FUND_CODE
    HAVING COUNT(*) > 1
)
AND ID NOT IN (
SELECT  MAX(ID) as ID
  FROM IFT_FUND_STANDARD_MODIFY
  WHERE FUND_CODE ='01032'
GROUP BY TIMS_DATE||FUND_CODE
HAVING COUNT(*) > 1
)

 

CONCAT(TIMS_DATE,FUND_CODE) 도 가능

 

출처 - http://linguist79.tistory.com/49

[ORACLE]ALTER COLUMN

Database 2017.10.17 08:34 Posted by 애플자라

-- 일반 컬럼수정
ALTER TABLE EM_MMT_TRAN
MODIFY RECIPIENT_NUM VARCHAR2(16 BYTE)

 

-------------------------------------------------------------------------------------


-- 일반 컬럼수정(NOT NULL)
-- ORA-01442: column to be modified to NOT NULL is already NOT NULL
ALTER TABLE EM_MMT_TRAN
MODIFY CALLBACK VARCHAR2(16 BYTE) NOT NULL

 

-- DISABLE
ALTER TABLE EM_MMT_TRAN DISABLE CONSTRAINT SYS_C0037363 CASCADE

 

--> 일반 컬럼 수정문 실행

 

-- ENABLE
ALTER TABLE EM_MMT_TRAN ENABLE CONSTRAINT SYS_C0037363 

 

SYS_C0037363 Check    Enabled        Not Deferrable    Immediate    Validated            1    "CALLBACK" IS NOT NULL

 

[ORACLE]CLOB DATA Export Excel(DBMS_LOB.SUBSTR)

Database 2016.03.28 15:09 Posted by 애플자라

CLOB 데이터가 원하는데로 안나와서 일단 미련하게 추출; 


 SELECT 

   BOARD_SEQ,

         SEQ,

         TITLE,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 1)  AS CONTENTS1,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 2001)     AS CONTENTS2,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 4001)     AS CONTENTS3,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 6001)     AS CONTENTS4,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 8001)     AS CONTENTS5,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 10001)    AS CONTENTS6,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 12001)    AS CONTENTS7,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 14001)    AS CONTENTS8,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 16001)    AS CONTENTS9

         --dbms_lob.getlength(CNTNT) -- 15801

    FROM TBD_BOARD

   WHERE BOARD_SEQ = '3'

ORDER BY SEQ DESC

[ORACLE]특정문자 자르기(뒤에 보여주기)

Database 2015.09.18 11:00 Posted by 애플자라

indexOf 와 같은 예약어 INSTR( 컬럼명 , '찾을문자')
lastindexOf 와 같은 예약어 INSTR( 컬럼명 , '찾을문자' , -1)  => -1을 붙여주면 뒤에서 부터

문자를 찾는다.

 

SELECT DISTINCT
       TARGET_DATE,
       FROM_NAME,
       USER_ID,
       SUBJECT,
       CONTENT,
       SUBSTR (CONTENT, INSTR (CONTENT, '전체순자산 총액') -1)     
  FROM SMSQUEUE_HOMEPAGE
  AND TARGET_DATE >= '2015/01/01'
  AND CONTENT like '%전체순자산 총액%'
  ORDER BY TARGET_DATE ASC

[개발자]초심 개념알기!!

Programing 2015.09.08 11:42 Posted by 애플자라

Windows/Linux 둘다적용

 

0. JDK설치(1.5이상)
1. Oracle설치(운영DB기준, 10g이상) - 테이블스페이스,테이블셋팅,계정부여,권한부여
2. Apache설치(2.0이상, C:/app/Apache2.x) - 웹서버개념,rotalog설정(CustomLog,ErrorLog 일자별 적재),포트확인, DocumentRoot
3. Resin/Tomcat설치(C:/app/Resin4.x, C:/app/Tomcat7) - WAS개념,포트확인,java heap 메모리셋팅
4. 아파치,Resin/Tomcat 연동(Port 80) - 포트확인,연동포트(Listen포트)


위 내용이 다 끝나면
1. Apache vhost를 이용해서 100포트로 (ex, D:/Project/homepage_dev)로 두개 올리기
2. subversion Windows설치 후 소스관리(Commit,Update,synchronize), 권한설정

 

위 내용이 다 끝나면 - editplus쓰지 않고 shell로만 사용
1. Linux(CentOS7.0) 설치 - Centos 버전 및 커널 버전 확인하기
2. yum설치 or rpm설치 알기
3. Apache, Tomcat, Resin, Mysql(5.0이상),Oracle(11g설치),subversion,FTP(서버),SSH,오픈SSL 설치 - 계정부여,그룹부여,권한부여,telnet접속막기
4. 파일질라,알FTP, FTP툴 안쓰고 ftp get put 사용해보기(아스키,바이너리 개념)
5. wget 사용해보기

 

[ORACLE]조인 결과로 테이블 UPDATE하기

Database 2014.10.29 16:54 Posted by 애플자라

UPDATE TB_MARKETING AA

SET (AGENCY_ID) = (SELECT AGENCY_ID FROM TEMP_GROUP B WHERE B.GROUP_NAME =AA.GROUP_NAME)

 

 

SELECT E.ID, E.SUBID, T.SUBID

UPDATE TB_MARKETING SET SUBID = T.SUBID

FROM TB_MARKETING E

INNER JOIN #TEMP_GROUP T ON ( E.SEQ = T.SEQ )

[ORACLE]FLASH BACK을 이용한 데이터복구

Database 2014.10.29 14:31 Posted by 애플자라

 

오라클을 이용하다면 보면 의도치 않게 데이터를 삭제하거나 변경을 하고 커밋을 해버리는 경우가 종종 발생하는데요.

이런 경우 데이터를 COMMIT을 한지 얼마 안 되었거나 메모리를 넉넉하게 잡아놓은 경우 FLASHBACK 기술을 이용해서 데이터 복원이 가능합니다.


1. 먼제 임시 테이블과 데이터를 생성합니다.






2. 데이터를 삭제하고 COMMIT을 합니다.




3. FLASHBACK에 데이터가 존재하는 확인합니다. 

본 포스팅에서 사용할 명령어는 AS OF TABLE 입니다. 자세히 기술하면 다음과 같습니다.


SELECT * FROM TEMP_TABLE

  AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '8' MINUTE); 여기에서 '8'은 몇분전에 데이터를 조회할지를 표시하는 것으로 본 포스팅에서 사용된 쿼리는 8번 데이터를 조회한다는 뜻입니다. 여기서 보여줄 수 있는 데이터의 인터벌은 시스템 설정 및 운영에 따라 달라질 수 있습니다.




   4. 데이터가 조회가 된다면 원래있던 테이블에 새롭게 INSERT 하는 방법 등으로 데이터를 복구 할 수 있습니다.

 

SELECT * FROM NEWYN_UPDATE_TRG01_LOG

AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '8' MINUTE)

SELECT * FROM LAW_OP_FUND
AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1575' MINUTE)

 

출처 - http://hothobbang.tistory.com/63

[ORACLE]Unique 번호를 남길때

Database 2014.10.02 10:40 Posted by 애플자라

SELECT

    ROW_NUMBER () OVER (ORDER BY NAME ASC) EMS_M_ID,

    NAME,

    EMAIL    

FROM

    테이블명

CREATE OR REPLACE TRIGGER APLUSORA.NEWYN_UPDATE_TRG01

 AFTER UPDATE OF CONFIRM5 ON APLUSORA.CUSTOMER

 FOR EACH ROW

 BEGIN

    if :NEW.CONFIRM5 = 'N' then -- CONFIRM5 ='N' 경우만

         UPDATE APLUSORA.NEWS_CUST

            SET NEWS_YN = 'N'

         WHERE  EMAIL = :NEW.EMAIL

         AND    NEWS_YN = 'Y';

         UPDATE APLUSORA.FAIR_CUSTOMER

            SET NEWS_YN = 'N'

         WHERE  FC_EMAIL = :NEW.EMAIL

         AND    NEWS_YN = 'Y';

         INSERT INTO NEWYN_UPDATE_TRG01_LOG (EMAIL, CONFIRM5, ACTION)

         VALUES(:NEW.EMAIL, :NEW.CONFIRM5, 'UPDATE');

    end if;

 END;

/

 

CREATE OR REPLACE TRIGGER APLUSORA.NEWYN_DELETE_TRG01

 AFTER DELETE ON APLUSORA.CUSTOMER

 FOR EACH ROW

 BEGIN

    UPDATE APLUSORA.NEWS_CUST

    SET NEWS_YN = 'N'

    WHERE  EMAIL = :OLD.EMAIL;

    UPDATE APLUSORA.FAIR_CUSTOMER

    SET NEWS_YN = 'N'

    WHERE  FC_EMAIL = :OLD.EMAIL;

    INSERT INTO NEWYN_UPDATE_TRG01_LOG (EMAIL, CONFIRM5, ACTION)

    VALUES(:OLD.EMAIL, :OLD.CONFIRM5, 'DELETE');

 END;

/

 

-- 사기꾼한테 피해를 입지 않게 트리거로그도 동시에 남김!

CREATE TABLE APLUSORA.NEWYN_UPDATE_TRG01_LOG

(

  EMAIL        VARCHAR2(50 BYTE),

  CONFIRM5     VARCHAR2(1 BYTE),

  ACTION       VARCHAR2(6 BYTE),

  REGISTER_DT  DATE DEFAULT SYSDATE

)

 

BEFORE : 데이터 처리가 실행되기 전

AFTER : 데이터 처리가 실행 된 후

FOR EACH ROW : 데이터 처리시 건건이 모두 트리거 실행

:OLD.컬럼명 : SQL 반영전의 컬럼 데이터

:NEW.컬럼명 : SQL 반영 후의 컬럼 데이터