반응형
프로젝트를 진행하다보면 Oracle 에서 Sybase로 변경하는 경우가 간혹 발생하여 정리 한다.
Oracle과 Sybase 제품군 비교
Oracle | Sybase |
Oracle Database Server | Sybase ASE |
Oracle OLAP and DW | Sybase IQ |
Oracle Analytics | Sybase IQ |
Oracle RAC | Sybase ASE Cluster Edition |
Oracle Times Ten | Sybase ASE 15.5 In-Memory Database |
Oracle Data Guard | Sybase Mirror Activator |
Oracle Streams | Sybase Replication Server |
Oracle ExalData | Sybase IQ Appliance |
MySQL | Sybase ASE 15 Express, Free to use on Linux |
DATA Types 비교
Oracle | Description | Sybase ASE | Comments |
NUMBER(x) | 소수점이 없는 숫자형식 | BIGINT | NUMBER의 길이 데이터 형식이 15보다 큽니다. |
FLOAT | NUMBER의 길이 데이터 유형은 11과 15사이에 있다. |
||
INTEGER | 길이가 6에서 10사이라면 사용 | ||
SMALLINT | 길이가 4에서 5사이라면 사용 | ||
TINYINT | 길이가 2에서 3사이 255와 같거나 작음 (데이터 <=255) |
||
BIT | 길이가 1 | ||
NUMBER(x,y) | 소수점이 존재하는 숫자형식 | DOUBLE | 소수점포함 전체 자릿수가 15 보다 클때 (데이터 > 15) |
FLOAT | 소수점포함 전체 자릿수가 15 이하일때 (데이터 <= 15) |
||
NUMBER(x,y) | 소수점이 존재하는 숫자형식 | NUMERIC(x,y) | 오라클과 동일 |
DECIMAL(x,y) | 오라클과 동일 NUMERIC보다 정밀도가 높으나 결론은 동일함 |
||
MONEY | NUMBER(x,2) 로 고정 | ||
FLOAT | 오라클 MAX 38자리 | DOUBLE | (데이터 > 15) |
FLOAT | (데이터 <= 15) | ||
CHAR(x) | 오라클 MAX 2,000 bytes | CHAR(x) | 1953 byte 보다 작을 경우 사용 |
TEXT | 1953 byte 보다 큰 경우 사용 무제한 | ||
VARCHAR2(x) | 오라클 MAX 4,000 bytes | VARCHAR(x) | 4001 byte 보다 작을 경우 사용 |
TEXT | 무제한 | ||
DATE | DATETIME | ||
TIMESTAMP | 오라클 수용범위 1/100000000th of a second. |
BIGDATETIME | 오라클의 TIMESTAMP 수용범위를 만족함 |
RAW(x) | 오라클 MAX 2,000 bytes | BINARY(x) | 1953 byte보다 작은경우 사용 |
IMAGE | 1953 byte보다 큰 경우 사용, 무제한 | ||
ROWID | 오라클은 10자리 문자열 타입임 | CHAR(10) | 10자리 |
CLOB | 오라클 MAX 128TB | TEXT | MAX 4GB |
BLOB | 128TB | IMAGE | MAX 4GB |
CHAR(1) | 1자리 문자열 | BIT | 1자리 문자열 |
System Function 비교
Oracle | Description | Sybase ASE | Comments |
CEIL | CEILING | ||
TRUNC | CONVERT(INT,…) | ||
SUBSTR() | SUBSTRING() | ||
LENGTH() | CHAR_LENGTH() | ||
CHR() | CHAR() | ||
TO_CHAR | CONVERT | ||
TO_NUMBER | CONVERT(NUMERIC(n,n),field) |
Data Function 비교
Oracle | Description | Sybase ASE | Comments |
LAST_DAY | N/A | ||
SYSDATE | GETDATE() | ||
NVL | ISNULL | ||
NVL2 E.g NVL2(salary,salary*2,0) |
CASE 문 활용 E.g. CASE WHEN salary = NULL THEN 0 ELSE salary * 2 END |
||
DECODE | CASE 문 활용 | ||
add_months | E.g SELECT add_months( col, 3) FROM DUAL |
DATEADD | E.g SELECT DATEADD(month, 3, col) |
SELECT 구문 예시
Oracle | Sybase | ||
SELECT DECODE(T1.C1, 'CLNN', T2.C2, T3.C3) as P_ID, T4.ID as ID FROM T4, T1, T2, T3 WHERE T4.ID = T1.ID(+) and T1.ID(+) = 'L3' and T4.ID = T2.ID(+) and T4.ID = T3.ID(+) and T3.TYPE='C' and T3.STAT = '00' |
SELECT case T1.C1 when 'CLNN' then T2.C2 else T3.C3 end as P_ID, T4.ID as ID into tempdb..query13 FROM T1 left outer join T2 on T1.ID = T2.ID and T1.ID = 'L3' left outer join T3 on T1.ID = T3.ID left outer join T4 on T1.ID = T4.ID where T3.TYPE='C' and T3.STAT = '00' |
||
SELECT T1.EFF_DATE, NVL(T1.END_DATE, 0) as END_DATE, T1.ID FROM T1 WHERE T1.STAT='00' AND (T1.ID, T1.TIMESTAMP) IN (SELECT T1.ID, MAX(T1.TIMESTAMP) as TIMESTAMP FROM T1 WHERE T1.STAT='00' GROUP BY T1.ID) |
select T1.EFF_DATE, isnull(T1.END_DATE,0) as END_DATE, T1.ID from (select EFF_DATE, END_DATE, ID, TIMESTAMP from T1 where STAT='00') as T1, (select ID, max(TIMESTAMP) as TIMESTAMP from T1 where STAT='00' group by ID) as T2 where T1.ID = T2.ID and T1.TIMESTAMP = T2.TIMESTAMP |
||
INSERT INTO <table> (col1, col2) SELECT FROM …. | 가능함, 오라클과 동일 |
INSERT 구문 예시
Oracle | Sybase | ||
INSERT INTO state (state_abbrev) VALUES ('WA'); COMMIT; SELECT * FROM state; |
INSERT INTO state (state_abbrev) VALUES ('WA') GO SELECT * FROM state GO |
기타 설명
Oracle 설명 | Sybase 설명 | ||
쿼리 구분자 ; | 쿼리 구분자 GO | ||
대소문자 구분 (Sybase는 대소문자를 구분한다.) 테이블명 : test select * from TEST => 가능 |
대소문자 구분 (Sybase는 대소문자를 구분한다.) 테이블명 : test select * from TEST => 오류 (존재하지 않는 테이블) |
||
문자열 조합 || E.g (name1 || ' ' || name2) as fullname |
문자열 조합 + E.g (name1 + ' ' + name2) as fullname |
||
숫자형태 (id 컬럼은 숫자컬럼) SELECT id = '100' 동작하지만 권장하지 않음 |
숫자형태 (id 컬럼은 숫자컬럼) SELECT id = 100 |
||
쿼리툴에서…. 트랜잭션 처리 후 필요시 ROLLBACK or COMMIT |
쿼리툴에서…. Sybase는 AUTO COMMIT 임. 필요시 아래와 같이 BEGIN TRAN 선언 후 작업 함 BEGIN TRAN DELETE FROM <table> WHERE ID = '1' 데이터 확인 후 COMMIT or ROLLBACK |
||
DISTINCT | DISTINCT 사용가능 | ||
flashback-query | flashback-query 지원 안함 | ||
SELECT sysdate FROM dual | SELECT getdate() | ||
CREATE TABLE <newtable> as select * from <oldtable> | SELECT col1, col2 INTO <newtable> FROM <oldtable> | ||
SELECT * FROM ALL_TABLES | sp_help | ||
SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'name' | sp_help <object_name> | ||
SELECT NVL(a.username, '(oracle)') AS username, a.osuser, a.sid, a.serial#, d.spid AS process_id, a.wait_class, a.seconds_in_wait, a.state, a.blocking_session, a.blocking_session_status, a.module, TO_CHAR(a.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time FROM v$session a, v$process d WHERE a.paddr = d.addr AND a.status = 'ACTIVE' ORDER BY 1,2; |
sp_who | ||
SELECT LPAD(' ', (level-1)*2, ' ') || NVL(s.username, '(oracle)') AS username, s.osuser, s.sid, s.serial#, s.lockwait, s.status, s.module, s.machine, s.program, TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time FROM v$session s CONNECT BY PRIOR s.sid = s.blocking_session START WITH s.blocking_session IS NULL; A50 |
sp_lock | ||
SELECT * FROM v$database; | sp_helpdb | ||
SELECT * FROM v$instance; | sp_server_info | ||
SELECT * FROM v$version; | select @@version | ||
SELECT a.name, a.value FROM v$sga a; | sp_configure ‘mem’ | ||
[Query Plan 조회] SELECT LPAD(' ', 2 * (level - 1)) || DECODE (level,1,NULL,level-1 || '.' || pt.position || ' ') || INITCAP(pt.operation) || DECODE(pt.options,NULL,'',' (' || INITCAP(pt.options) || ')') plan, pt.object_name, pt.object_type, pt.bytes, pt.cost, pt.partition_start, pt.partition_stop FROM plan_table pt START WITH pt.id = 0 AND pt.statement_id = '<session ID>' CONNECT BY PRIOR pt.id = pt.parent_id AND pt.statement_id = '<session ID>'; |
sp_showplan <spid> | ||
[상위 10개 리소스 점유] SELECT * FROM (SELECT Substr(a.sql_text,1,50) sql_text, Trunc(a.disk_reads/Decode(a.executions,0,1 ,a.executions)) reads_per_execution, a.buffer_gets, a.disk_reads, a.executions, a.sorts, a.address FROM v$sqlarea a ORDER BY 2 DE |
select top 10 * from master..monProcessObject order by PhysicalReads desc |
반응형
'개발 > database' 카테고리의 다른 글
[oracle] 오라클 플래시백 쿼리 flashback query AS OF TIMESTAMP (0) | 2021.01.17 |
---|---|
[oracle] 오라클 plsql loop sample (0) | 2021.01.17 |
[oracle] 오라클 날짜, 숫자를 원하는 포맷 문자열로 변환 to_char (0) | 2021.01.17 |
[oracle] 오라클 merge into (0) | 2021.01.17 |
[oracle] 오라클 에러코드 oracle error code list (0) | 2021.01.17 |
댓글