문자열 , 혹은 $로 문자 구분하여 행으로 전화

 

SELECT REGEXP_SUBSTR('A,B,C$D', '[^,$]+', 1, LEVEL ) AS DATA
FROM DUAL
CONNECT BY REGEXP_SUBSTR('A,B,C$D', '[^,$]+', 1, LEVEL ) IS NOT NULL

AND

테이블 A(피벗기준정보테이블),B(데이터테이블)

 

SELECT

묶어서 보여줄 B내용들,

LISTAGG(A컬럼 및 B관련표기내용) WITHIN GROUP (ORDER BY A에 있는 표기순번) AS VALUE --A컬럼 및 B관련표기내용 : A.a,A.b,B.a,B.b 등등을 문자열로 묶어서...

FROM A,B

PARTITION BY (ROW에 묶어서 보여줄 B컬럼들)  ON A.컬럼=BB.컬럼

GROUP BY ROW에 묶어서 보여줄 B컬럼들

ORDER BY B컬럼에 의한 ROW순번;

 

AND

dump하면서 insert문으로 뽑아놨는데....

파일이 너무 커서 에디트프로그램으로도 열리지 않아 검색....

sqlplus로 해당 DB접속 후,

SQL>@C:\경로명\파일명

잘만 들어가는 중...

AND

--isnumeric 선행

CREATE OR REPLACE FUNCTION ERR_CHECK (p_value IN VARCHAR2,n_check IN VARCHAR2,l_check NUMBER,c_check VARCHAR2,d_check VARCHAR2) RETURN VARCHAR2          
   --p_value : 입력 데이터 값       
--체크는 아래의 순서대로 먼저 체크하고 에러가 있을시 이후는 체크안하게 됨.       
--n_check : NULL체크 (체크시 'Y'로 : NULL일 경우 :'N'리턴)       
--l_check : 최대 길이체크(체크시 허용최대길이로, 0일시 미체크 : 초과시 'L허용길이'리턴)       
--c_check : CODE체크 (코드로 체크시 'C'+코드CD로, 코드값으로 체크시 'N'+코드CD로, 미체크시 '!'로: 매칭이 안될 경우 :'C'리턴)       
--d_check : 숫자여부체크(체크시 'Y'로 : 숫자가 아닐시 'D'리턴)       
AS          
p_cd VARCHAR2(255);        
p_nm VARCHAR2(255);        
p_gubun varchar2(1);        
BEGIN           
   IF n_check='Y' THEN     
    IF p_value IS NULL THEN RETURN 'N'; END IF;     
   END IF;        
           
   IF l_check<>0 THEN     
    IF LENGTHB(NVL(p_value, ' '))>L_CHECK THEN RETURN 'L'||l_check ; END IF;     
   END IF;         
      
   IF c_check<>'!' THEN     
       p_gubun:=substr(c_check,1,1);      
       p_cd:='';      
       p_nm:='';      
       IF p_gubun='C'      
       THEN        
           SELECT /*+INDEX_DESC(B CODE_SUB_PK_)*/ NVL(MAX(CD),'!F') INTO p_cd FROM CODE_SUB B WHERE B.NO=substr(C_CHECK,2) AND B.CD=TRIM(p_value);           
       END IF; 
       
       IF p_gubun='N'
       THEN 
           SELECT /*+INDEX_DESC(B CODE_SUB_PK_)*/ NVL(MAX(CD),'!F') INTO p_nm FROM CODE_SUB B WHERE B.NO=substr(C_CHECK,2) AND B.CD_NM1=TRIM(p_value);          
       END IF;      
             
       IF (p_gubun='C' and p_cd='!F') or (p_gubun='N' and p_nm='!F') THEN RETURN 'C';        
       END IF;        
   END IF;     
           
   IF d_check='Y' THEN     
    IF ISNUMERIC(NVL(p_value,0))=0 THEN RETURN 'D'; END IF;     
   END IF;           
   RETURN 'T';        
           
           
EXCEPTION           
   WHEN OTHERS THEN           
      RETURN 'E';           
END;
/

AND


CREATE OR REPLACE FUNCTION ISYYYYMMDD (p_date IN VARCHAR2,p_gubun IN VARCHAR2) RETURN NUMBER   
--p_date : 입력받는 문자열, p_gubun : 날짜구분형식(-이면 2011-03-28)
AS   
l_tst date;  
BEGIN  
   l_tst := to_date(p_date,'YYYY'||p_gubun||'MM'||p_gubun||'DD');  
   if REGEXP_REPLACE(p_date,'[0-9][0-9][0-9][0-9]'||p_gubun||'[0-9][0-9]'||p_gubun||'[0-9][0-9]','Y')='Y' then  
       RETURN 1;  
   else  
       RETURN 0;  
   end if;  
EXCEPTION  
   WHEN OTHERS THEN  
      RETURN 0;  
END;
/

AND

--숫자가 아니면 -1(단, '4.' 같은 경우는 0으로 표기)
CREATE OR REPLACE FUNCTION isDECIMALPOINT (p_num IN VARCHAR2) RETURN NUMBER 
AS 
l_tst NUMBER;
BEGIN
   l_tst := TO_NUMBER(p_num);
   if INSTR(p_num,'.')>0 then
       if SUBSTR(p_num,INSTR(p_num,'.')+1) is null then
        return 0;
       else 
        RETURN length(SUBSTR(p_num,INSTR(p_num,'.')+1));    
       end if;
   else
       RETURN 0;
   end if;
EXCEPTION
   WHEN OTHERS THEN
      RETURN -1;
END;
/
AND


SELECT length('AABA') - length(replace('AABA', 'A', ''))  FROM DUAL

특정문자열을 빈값으로 치환하고 전체 길이에서 치환된 길이를 구한다.
아...머리를 굴려야 하는데....

출처:http://cafe.naver.com/litave.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=334&
AND

SELECT LPAD(LEVEL,2,'0') MONTH FROM DUAL CONNECT BY LEVEL <= 12

필요시 JOIN해서 사용하기 위한 TABLE.
AND


UPDATE A SET VALUE=(SELECT B.VALUE FROM B WHERE A.KEY=B.KEY) WHERE EXISTS (SELECT 'X' FROM B WHERE A.KEY=B.KEY)

A와 B의 키를 비교하여 B의 VALUE값으로 해당 컬럼의 A VALUE값 치환.
:'X'는 TRUE라는 의미(의미없음)
AND

Oracle export/import

Program/Oracle 2011. 12. 18. 20:01

1. NLS_CHARACTER 확인 (한글 문제)
- select name , value$ from props$ where name like 'NLS%';
으로 import할 oracle의 NLS_CHARACTER확인
- update props$ set value$ = '확인된 NLS_CHARACTERSET' where name = 'NLS_CHARACTERSET'
export할 oracle의 NLS_CHARACTER을 import할 oracle의 NLS_CHARACTER으로 맞쳐준다.(단, 기존 데이터가 있을 경우는 형식이 틀려지기 때문에 하지 말 것.)
- 바꾼 후 반드시 Oracle 재시작.

2.export
- grant exp_full_database to ID;
(export 권한이 없는 경우)
- exp id/pw file="파일경로\파일명" full=y
(해당 유저의 datafile export)

3.tablespace 생성
- create tablespace tablespace명 datafile '경로/tabledspace명01.dbf' size 1024m reuse autoextend on next 10M maxsize 4096m
-
최대 용량 4G의 현재 기본 1G의 tablespace를 만든다.(꽉찰때마다 10M만큼 늘린다.)
- 웬만하면 export할 db와 동일 명칭으로 생성
-
기존 용량을 따져 미리 만들어놓는다.(4G를 최대로 하여 필요한 경우 02.dbf로 추가 생성)
- Oracle에서 최대 사이즈는 4G를 권장.

4.user생성
- create user ID identified by PWD default tablespace "tablespace명";
grant connect,resource,(dba), imp_full_database to ID;

5.import
- imp id/pw file="파일경로\파일명" fromuser='export한 user' touser='import할 user'

**기존에 DB가 있어 NLS_CHARACTERSET를 바꿀 수 없는 경우
- alter table TABLE_NAME modify (COLUMN_NAME DATATYPE SIZE);
으로 column크기를 늘려 import한다.
AND