여기저기 뒤져서 Oracle과 다른점들을 찾아냈다.
Sybase는 자료를 찾아봐도 더럽게 없다;;
허나 근성으로 삽질한 끝에 약간의 정보를 입수하였다.
Sybase ASIQ 와 Sybase ASE에서도 많은 차이가 있다는 것도 알았다.
ASE는 제쳐두고 내가 쓰게될 ASIQ의 SQL문을 중점으로 정리해봤다.
먼저 DATA TYPE 부터 비교하면
Oracle |
ASIQ |
VARCHAR2(size) | VARCHAR(size) |
NVARCHAR2(size) | |
NUMBER | TINYINT, |
SMALLINT, | |
INT, | |
UNSIGNED INT, | |
BIGINT, | |
UNSIGNED BIGINT | |
NUMBER(p,s) | NUMERIC(p,s), |
DECIMAL(p,s) | |
FLOAT | FLOAT |
REAL | |
DOUBLE | |
LONG | VARCHAR(size) |
DATE | DATE |
TIME | |
DATETIME | |
SMALLDATATIME | |
TIMESTAMP, | TIMESTAMP |
TIMESTAMP | |
WITH TIME ZONE, | |
TIMESTAMP | |
WITH LOCAL TIME ZONE | |
INTERVAL …. | |
RAW(size) | BINARY(size) |
VARBINARY(size) | |
LONG RAW | LONG BINARY |
ROWID | |
UROWID [(size)] | |
CHAR(size) | CHAR(size) |
NCHAR(size) | |
CLOB | LONG BINARY |
NCLOB | |
BLOB | LONG BINARY |
BFILE | |
BIT | |
ANY | |
XML | |
SPATIAL | |
MEDIA |
이러하다.
이제 본격적으로 SQL을 비교해본다.
1. DUMMY TABLE
Oracle에서는 dual를 이용하지만, ASIQ에서는 sys.dummy 를 이용하거나 생략한다.
오라클에서의 예) SELECT sysdate FROM dual;
Sybase ASIQ에서의 예) SELECT now() FROM sys.dummy;
혹은
SELECT now();
2. OUTER JOIN
오라클에서는 일반적으로 아래와 같이 outer join 한다.
오라클에서의 예) SELECT a.부서명, b.이름
FROM 부서테이블 a, 사원테이블 b
WHERE a.부서코드 = b.부서코드(+);
이것을 ASIQ에서는 아래와 같이 표현한다.
Sybase ASIQ에서의 예) SELECT a.부서명, b.이름
FROM 부서테이블 a, 사원테이블 b
WHERE a.부서코드 *= b.부서코드;
3. 테이블 구조보기
오라클에서의 예) desc 테이블명;
Sybase ASIQ에서의 예) sp_iqcolumn 테이블명;
4. 테이블 목록보기
오라클에서의 예) SELECT * FROM tab;
Sybase ASIQ에서의 예) sp_iqtable;
5. 자주쓰는 함수
현재날짜 구하기
오라클에서의 예) SELECT SYSDATE FROM dual;
SELECT CURRENT_DATE FROM dual;
Sybase ASIQ에서의 예) SELECT TODAY() [ FROM sys.dummy ];
SELECT NOW() [ FROM sys.dummy ];
SELECT CURRENT DATE [ FROM sys.dummy ];
소수점 이하 올림을 구하는 함수
오라클에서의 예) SELECT CEIL (12.3) FROM dual;
Sybase ASIQ에서의 예) SELECT CEILING (12.3) [ FROM sys.dummy ];
지정된 소수점 이하를 버리는 함수
오라클에서의 예) SELECT TRUNC(123.4567, 2) FROM dual;
Sybase ASIQ에서의 예) SELECT "TRUNCATE"(123.4567, 2) [ FROM sys.dummy ];
문자열을 연결하는 함수
오라클에서의 예) SELECT CONCAT(CONCAT ( 'a', 'b' ), 'c') FROM dual;
SELECT 'a' || 'b' || 'c' FROM dual;
Sybase ASIQ에서의 예) SELECT STRING('a','b','c') [ FROM sys.dummy ];
SELECT 'a' || 'b' || 'c' [ FROM sys.dummy ];
NULL을 다른 값으로 변환해 주는 함수
오라클에서의 예) SELECT NVL (null,1) FROM dual;
SELECT COALESCE (NULL, 1) FROM dual;
Sybase ASIQ에서의 예) SELECT COALESCE (NULL, 1) [ FROM sys.dummy ];
숫자를 문자로 변환하는 함수
오라클에서의 예) SELECT TO_CHAR (12345) FROM dual;
Sybase ASIQ에서의 예) SELECT STR(12345, 5) [ FROM sys.dummy ];
문자를 숫자로 변경하는 함수
오라클에서의 예) SELECT TO_NUMBER ('123456') FROM dual;
Sybase ASIQ에서의 예) SELECT CAST('123456' AS INT) [ FROM sys.dummy ];
문자를 DATE형으로 변환하는 함수
오라클에서의 예) SELECT TO_DATE('1999-01-02 12:20:53','YYYY-MM-DD HH:MI:SS') FROM dual;
Sybase ASIQ에서의 예) SELECT CAST('1999-01-02 12:20:53' as DATE) [ FROM sys.dummy ];
SELECT CAST('1999-01-02 12:20:53' as DATETIME) [ FROM sys.dummy ];
SELECT DATE('1999-01-02 12:20:53') [ FROM sys.dummy ];
SELECT DATETIME('1999-01-02 12:20:53') [ FROM sys.dummy ];
질의 결과에 번호를 지정하는 함수
오라클에서의 예) SELECT *
FROM 테이블명
WHERE ROWNUM < 100;
Sybase ASIQ에서의 예) SELECT *
FROM 테이블명
WHERE NUMBER(*) < 100;
이외에도 많은 것들이 있겠지만
계속 삽질을 하다보면 알게 되겠지.
뭐... 모르면 할 수 없고... ㅋ
'DB' 카테고리의 다른 글
OUTER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN (0) | 2012.07.29 |
---|---|
UNION ALL (0) | 2012.07.29 |
마스터 디테일 구조에서 order by (0) | 2012.07.29 |
OALL8이 불일치 상태입니다 (0) | 2012.07.29 |
MySql dmp (0) | 2012.07.29 |