'Oracle'에 해당하는 글 3건

  


오라클 에서 MSsql로 컨버젼 작업을 진행 혹은 반대로 진행 하는 경우가 많다.
 
또한 오라클에서는 이렇게 썼는데 MSsql에서는 어떻게 쓰지? 이렇게 가끔 생각하는 경우가 있다.
 
몇가지 기억나는 순서대로 정리 해 보았다.

아래의 정리내역은 순수하게 기억나는 대로 정리하였기 때문에 실수도 있음을 인정해 달라..ㅋ
 
그래도 나도 가끔 이 정리한 내역을 보면서 유용하게 사용 하곤 한다.
 

항목

처리방식

Outer Join 수정

- 표준 outer join을 사용할 것.

   주의) 표준 outer joun 사용 시 상수의 outer join 주의

   예) FROM v_acl_user acluser, v_acl_dept acldept

        WHERE  acluser.deptid=acldept.deptid(+)

        AND     acldept.useyn ='Y'(+)

    
       => FROM v_acl_user acluser LEFT OUTER JOIN  
                     v_acl_dept acldept ON  acluser.deptid=acldept.deptid 
           AND  acldept.useyn ='Y' 임

        FROM v_acl_user acluser LEFT OUTER JOIN  
                     v_acl_dept acldept ON  acluser.deptid=acldept.deptid

        WHERE  acldept.useyn ='Y' 가 절대 아님

NVL 수정

- NVL => ISNULL

   주의) NVL( 변수, '') 인 경우는 ISNULL 에서 NULL 과 동일하게 인식하므로
             건별로 수정

   예) NVL(a.amount,0)
           => ISNULL(a.amount,0)

Convert 함수

- TO_NUMBER, TO_DATE,TO_CHAR 등의 함수
      => CAST 또는 CONVERT 로 변환

   예) 1) TO_NUMBER(x0.eval_totpoint)
           => CAST(x0.eval_totpoint AS NUMERIC(20,5))

         2) to_char(sysdate,'YYYYMMDD')
            => CONVERT(varchar(8),GETDATE(),112)

String 연결 함수

- || => +

    예) B.id LIKE (A.id || '%')
           => B.id LIKE (A.id + '%')

SUBSTRING 함수

- SUBSTR => SUBSTRING

    예) SUBSTR(up_deptid ,1 ,4)
           => SUBSTRING(up_deptid ,1 ,4)

         SUBSTR(a.nm,4)
           => SUBSTR(a.nm,4,len(a.nm))

상위 1 개 Select

- /*+ first_rows */ => TOP 문 으로 치환

rownum 수정

- TOP 으로 수정

    예) WHERE rownum = 1
            => SELECT TOP 1

- Select 바로 옆의 rownum 은 Cursor 이용함
   - Inline View 형식의 rownum 은 dual 테이블 이용함

LENGTH/LENGTHB

- LENGTH => LEN

   예) LENGTH(up_deptid)
           => LEN(up_deptid)

 - LENGTHB => DATALENGTH

DECODE/Greatest/Least

 - CASE .. WHEN .. ELSE.. END 로 수정

   오라클은 8i(?) 부터 위의 문장이 되므로 오라클도 case사용

LPAD / RPAD

-REPLICATE 및 DATALENGTHB 이용하여 변경

  예) LPAD(to_char(w_seq_no), 4, '0')
         => REPLICATE('0', 4 - DATALENGTH(CONVERT(VARCHAR(4),@w_seq_no))) + CONVERT(VARCHAR(4),@w_seq_no)

        RPAD(' ',depth*3)
          => space(depth*3)

TRIM 함수

  예) TRIM(@v_apprepuserid)
          => RTRIM(LTRIM(@v_apprepuserid))

DATE 연산 함수

- ADDDATE 함수 사용

   예) sysdate + 1
          => ADDDATE(day,1,getdate()) 와 같은 형식으로 변경

INSTR 함수

- CHARINDEX  함수 사용

   예) INSTR(문자열a,문자열b)
          => CHARINDEX(문자열b,문자열a) 와 같이 변경됨

CHR(10)

 CHR(10) => CHAR(10), CHR => CHAR 로 변경

SF 수정 절차

1) varchar2 => varchar로

2) number => numeric

3) 변수 앞에 @ 붙이기 및 Declare 추가

   예제) aaa => @aaa

4) 변수 선언 시 Declare 추가

5) ";" 제외

6) Exception 부분의 no data found 부분 처리

7) IF 문 수정

8) 선언문 수정( :=  => SET 또는 SELECT)

9) INTO 문 없애기

  **기타) Query 문 수정

주의) 함수에서 GETDATE() 함수는 사용 불가

        #Temp table 사용 불가

        함수를 select 문에서 call 할 경우 반드시 owner 이름을 붙인다 => select dbo.sf_get('a'))

SP 수정 절차

* SF 와 거의 유사

Trigger 수정 절차

1) :old, :new 대신 select id from deleted OR select id from inserted 사용

2) SP Call 할 경우 sp_('a','a')=>exec sp_ 'a','a'

3) ON Table 명을 Trigger 명 바로 뒤에

    예제) CREATE TRIGGER tr_t_appline_insert ON t_appline

4) Before Trigger 가 안됨 => FOR 로 대치함

5) FOR EACH 인 경우 Cursor 를 이용하여 Loop 처리

6) old 와 new 를 같이 사용하는 UPDATE의 경우 PK 에 대한 수정은 없다고 가정

  * 나머지 문법적인 요소는 SP/SF 참조

SF 호출

- Store Function 호출 시 반드시 dbower.function 명으로 호출

   예) SELECT sf_appcontent_columnval('a','a')  
           FROM v_voter_d
          => SELECT dbo.sf_appcontent_columnval('a','a')  
              FROM  v_voter_d



다소 지저분하게 정리가 되었다. 위의 테이블은 ORACLE에서 MSSQL로의 CONVERSION 기준으로 정리 하였다.


WRITTEN BY
한량이

트랙백 0 , 댓글  5개가 달렸습니다.
  1. 퍼가요
  2. 오랜만에 네이버 검색하다 우연히 왔네요 ㅎㅎ

    출처 밝혔습니다. 감사합니다.^^
  3. 좋은 자료 감사합니다. 즐겨찾기로 자주 볼께요 ^^
  4. 좋은글 출처를 표시하고 블로그에 담아갑니다. ^^
secret


오라클을 사용하다 보면 테이블 스페이스가 꽉 차서 스페이스를 추가 하려고 할때가 많다.

또 개발자들은 여러개의 Tablespace를 생성 해서 쓰는데 저번에 어떤위치에 생성하였지 하고 고민을 하는 경우가 많다.

간단하게 tablespace의 정보를 알수 있는 것이

select * from dba_data_files 이다.

이걸 쿼리해 보면 여러가지 정보가 나온다 실제 파일 위치 및 이름... 등등... 아래와 같이 정보가 나타난다.



또하나 중요한 정보는

select * from dba_tablespaces 이다.

이건 tablespace의 이름및 extent값 pct_increase 값등 유용한 정보가 많이 나온다.


이런 부분을 알고 있으면 간혹 DB관리 할때 편하다... 오라클에서 제공되는 VIEW에 의하여 이런 많은 정보들이 제공되며 유용하게 사용할 수 있다.


WRITTEN BY
한량이

트랙백 0 , 댓글 0
secret

오라클 디비를 사용하다 보면 분명 프로그램 이상이겠지..

꼭 데이터베이스에 lock이 걸려 서버가 다운되거나... 미친듯이 오래 걸린다던가..

암튼 이만저만 짜증이 난다.. 중요한건.. 토드 같은 오라클 툴이 없으면.. 이거 LOCK걸렸을 때 쿼리 기억 안나면 미친다..

그래서 정리 해 봤다.. 힌트를 줘서 사용하니 조금 빠르군..

사용하는 계정으로 오라클을 로그인 하여 아래의 쿼리를 실행한다.


SELECT /*+ ordered */
        a.sid SID,
        to_char(b.serial#) SEQ,
        id1 ID1,
        to_char(b.audsid) AUD,
        b.username Uname,
        b.osuser OsUser,
        c.sql_text SQLSTMT
FROM v$lock a ,
        v$session b,
        v$sql c
WHERE   a.type = 'TM'
AND       a.sid = b.sid
AND       c.hash_value (+) = b.sql_hash_value;

제일 처음 나오는 a.sid는 Session ID이고  두번째의 b.serial# 는 Serial번호이다.
이 둘을 이용하여 해당작업을 강제 종료시킬 수 있다.

Alter System Kill session 'Sid,Serial#';
위에서 나온 첫째 필드값 -----^    ^----------두번째 필드값

물론 앞 두개의 컬럼 이외에 나머지는 그냥 정보로써 사용하면 된다...

kill하고 나면 사용하고 있는 데이타가 제대로 rollback이 되었는지 확인 해주는 센스....



WRITTEN BY
한량이

트랙백 0 , 댓글 0
secret